🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
2 messages
2 total messages Started by Tomasz Pieciak Sun, 13 May 2007 09:03
[Linux] Problem ze stostem
#1126
Author: Tomasz Pieciak
Date: Sun, 13 May 2007 09:03
78 lines
2567 bytes
Dzień dobry


Mam problem ze stosem podczas używania GNU Asemblera w Linuksie.

Gdy szkielet mojego programu wygląda tak:


----------------------------
         # dane
         .text
         .global _start

         _start:

         # kod
----------------------------

argumenty na stosie są następujące:

----------------------------
         ARGN
         ...
         ARG2
         ARG1  <- pierwszy argument programu
         ARGC  <- rejestr ESP - ilość argumentów
         .
         .
         0         <- address zerowy
----------------------------



zaś... kiedy zamienię etykietę '.global _start' na ' .globl mojanazwa'

----------------------------
         # dane
         .text
         .globl mojanazwa

         mojanazwa:

         # kod
----------------------------

Pojawia się pewien problem - argumenty programu wrzucone na stos 
wyglądają następująco:


----------------------------
         ARGN
         ...
         ARG2
         ARG1  <- pierwszy argument programu
         ARGC  <- ilość argumentów
         .
         .          <- zmienna ilość elementów
         .
         DANE   <- rejestr ESP
         .
         .
         0          <- address zerowy
----------------------------


Między elementem 'DANE', a 'ARGC' jest zmienna ilość elementów. Czasami 
jest to 84 bajty (21 elementów), czasami 116 bajtów (29 elementów) - 
różnie na różnych dystrybucjach systemu Linux.

Moje pytanie jest następujące:
Czy ta zmienna ilość elementów jest przez cokolwiek uwarunkowana ? Co 
jest wrzucane na stos w chwili wywołania programu przed ARGC ? Czy to 
jest zależne od linkera, kompilatora, jądra ?



-- 
Tomasz Pięciak
Re: [Linux] Problem ze stostem
#1127
Author: Bernard
Date: Sun, 13 May 2007 09:09
21 lines
1592 bytes
Tomasz Pieciak wrote:
> Dzień dobry
> 
> 
> Mam problem ze stosem podczas używania GNU Asemblera w Linuksie.

A my mamy zgadnąć, jak wywołujesz asembler i konsolidator, tak?

> zaś... kiedy zamienię etykietę '.global _start' na ' .globl mojanazwa'

To konsolidator zapewne nie wie, od jakiego adresu zaczyna się program, 
i dolinkowuje _start z CRT0. Oczywiście strzelam na ślepo, bo szklanej 
kuli nie dowieźli.

> Moje pytanie jest następujące:
> Czy ta zmienna ilość elementów jest przez cokolwiek uwarunkowana ? Co 
> jest wrzucane na stos w chwili wywołania programu przed ARGC ? Czy to 
> jest zależne od linkera, kompilatora, jądra ?

To zależy, co rozumiesz pod pojęciem "program", bo zgaduję, że to 
właśnie tu leży problem.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads