我正在爲32位和64位Linux操作系統創建驅動程序。其中一個要求是,所有的代碼都需要自我包含,而且沒有呼叫。在64位我沒有問題,但在32位GCC似乎增加了一個調用指令到下一個字節。搜索了一下後,我發現這個鏈接:Linux 32位反彙編調用指令到下一個字節
http://forum.soft32.com/linux/Strange-problem-disassembling-shared-lib-ftopict439936.html
有沒有一種方法來禁用此32位Linux?
實施例: 32位拆解:
<testfunc>:
0: push %ebp
1: mov %esp, %ebp
3: call 4 <test_func+0x4>
<...some operation on ebx as mentioned in the link above>
64位disassebmly:
<testfunc>:
0: push %rbp
1: mov %rsp, %rbp
3: <...no call here>
有一個在 「testfunc」 沒有呼叫在所有。即便如此,爲什麼32位編譯器添加這些「調用」指令?任何幫助表示讚賞。
您不需要禁用任何東西,這些調用用於計算i386上的PIC基址/ GOT地址,它們*爲*「自含式」,因爲它們不涉及任何外部功能。 –
通過「自給自足」你的意思是通話不做任何事情?如果我單步執行代碼,則會看到該調用實際上跳轉到EIP之外的偏移位置,然後執行某些指令。然後它返回到我的功能。我不想要這種行爲,我試圖禁用這個對GOT的引用。任何投入,如果有可能做到這一點? – asmprogrammer