【发布时间】:2011-05-13 23:54:30
【问题描述】:
我正在学习汇编程序,发现以下一些令人惊讶的地方。我基本上是从互联网上的某个地方复制了一些 hello world 代码
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80 ; interrupt for calling kernel
mov eax,1
int 0x80
section .data
msg db 'Hello, world!',0xa
len equ $ - msg
我用 nasm -f elf -g hello.asm, ld hellow.o -o hello 编译并链接它。如果我现在将它加载到 gdb 中,我可以列出代码并运行它就好了。如果我在第一条 mov 指令上设置断点,程序不会停在那里。在我得到的结果文件上运行 ndisasm (ndisasm -b32 hello)(我认为相关的部分):
0000007D 0000 add [eax],al
0000007F 00BA0E000000 add [edx+0xe],bh
00000085 B9A0900408 mov ecx,0x80490a0
0000008A BB01000000 mov ebx,0x1
0000008F B804000000 mov eax,0x4
00000094 CD80 int 0x80
00000096 B801000000 mov eax,0x1
0000009B CD80 int 0x80
所以指令没有出现。
我非常感谢有关正在发生的事情的提示,或者去哪里了解正在发生的事情。
【问题讨论】: