Angesichts des Beispiels eines einfachen Programms für GNU Assembler auf i386 Architektur unter Linux: < /p>
.section .data
msg: .ascii "Hi, People!\n"
len = . - msg
.section .text
.global _start
_start:
# print message
movl $4, %eax ; movl $1, %ebx ; movl $msg, %ecx ; movl $len, %edx
int $0x80
# exit to system
movl $1, %eax ; movl $0, %ebx
int $0x80
< /code>
und kompilieren Sie es so: < /p>
as --32 -o test test.s
ld -m elf_i386 a.out
< /code>
Ich frage mich: Sollte der Stapelzeiger zu Beginn manuell initialisiert werden, oder wird er irgendwie von Linker eingestellt (oder Betriebssystem beim Laden von Elfen)?regs: ECS, EDS, ESS:
0023 002B 002B
data segment: $msg ... esp:
080491BB FFF4D5E0
< /code>
i.e. Es sieht so aus, als ob DS- und SS -Punkt im selben Segment punkten, aber wenn diese Adressen kontinuierlich sind, sollte dieses Segment sehr groß sein. Entschuldigung für naive Frage.
So initialisieren Sie den Stapelzeiger in X86 Assembler unter Linux [Duplikat] ⇐ Linux
-
- Similar Topics
- Replies
- Views
- Last post