我用 anjuta 在 lubuntu 12.10 上编译了以下 C 程序
int main()
{
return 0;
}
文件名为 foobar
然后我打开终端并编写命令
ndisasm foobar -b 32 1>asm.txt
(使用 32 位指令选项反汇编 foobar 并将反汇编结果保存到 asm.txt)
我打开 asm.txt 有很多 0x0000 和无法理解的代码。
该指令jg 0x47(0x7F45) on 0x00000000 and dec esp(0x4C) on 0x00000002
似乎是 ELF 文件格式签名。(因为十六进制代码 0x454c46 在 ascii 中是 'ELF')
Linux 可能会将此代码加载到内存中,并且不会跳转到 0x00000000,因为没有可执行代码。
我在这里有问题。
- 我怎么知道起始地址的地址?
- 哪些代码可以忽略?(也许很多 0x0000 可以忽略,但还有什么?)