我一直在與C合作一段時間,最近纔開始進入ASM。當我編譯的程序:爲什麼GCC焊盤與NOP一起使用?
int main(void)
{
int a = 0;
a += 1;
return 0;
}
的objdump的反彙編了代碼,但漚後空指令:
...
08048394 <main>:
8048394: 55 push %ebp
8048395: 89 e5 mov %esp,%ebp
8048397: 83 ec 10 sub $0x10,%esp
804839a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
80483a1: 83 45 fc 01 addl $0x1,-0x4(%ebp)
80483a5: b8 00 00 00 00 mov $0x0,%eax
80483aa: c9 leave
80483ab: c3 ret
80483ac: 90 nop
80483ad: 90 nop
80483ae: 90 nop
80483af: 90 nop
...
從我所學到的空指令什麼也不做,自從退役後甚至不執行。
我的問題是:爲什麼要麻煩? ELF(linux-x86)無法使用任何大小的.text節(+ main)?
我很感激任何幫助,只是想學習。
那些NOP繼續進行嗎?如果他們停在'80483af',那麼可能是填充以將下一個函數對齊到8或16個字節。 – Mysticial
沒有在4個nops之後它跨越一個函數:__libc_csu_fini – olly
如果NOP被gcc插入,那麼我不認爲它將只使用0x90,因爲有很多NOP的大小可變[1-9字節]( http://software.intel.com/en-us/forums/topic/307174)(10如果使用[gas syntax](http://stackoverflow.com/a/12564044/995714)) –