![](/img/trans.png)
[英]Understanding assembly code when converting from unsigned char to long long
[英]Understanding assembly .long directive
在John Viega撰寫的C和C ++安全編程指南中,我遇到了以下聲明
asm("value_stored: \n"
".long 0xFFFFFFFF \n"
);
我不太了解匯編程序中.long
指令的用法,但是在這里它用於將預先計算的值嵌入可執行文件中。 我可以以某種方式強制這些字節在可執行文件中的位置嗎? 我嘗試將其放在main
的末尾(認為這種方式將在.text
節的末尾),但是出現了段錯誤。 將其放在主要作品之外。
即使在main
的末尾,內聯匯編程序序列也將生成要執行的代碼。 在我的環境中, objdump -d foo.o
顯示:
00000000004004b4 <main>:
4004b4: 55 push %rbp
4004b5: 48 89 e5 mov %rsp,%rbp
00000000004004b8 <value>:
4004b8: ff (bad)
4004b9: ff (bad)
4004ba: ff (bad)
4004bb: ff (bad)
4004bc: b8 01 00 00 00 mov $0x1,%eax
4004c1: 5d pop %rbp
4004c2: c3 retq
可以通過跳過它來緩解
asm("jmp 1f"
"value: .long 0xffffffff"
"1:");
關鍵字Nf或Nb創建本地臨時標簽以向前或向后跳轉。
另一個選擇是將變量放置到命名段中,該段可以在鏈接器文件中排序為.text或.data中的最后一個段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.