我有一個簡單的匯編代碼(aarch64)如下,
mov x1, #1
mov x1, #2
我想把它轉換成shellcode。
我做了什么:
#> as simple.s -o simple.o
#> objcopy -O binary simple.o simple.bin
之后,我檢查了 xxd 的內容
#> xxd simple.bin
但是,值 1 和 2 似乎沒有出現在結果二進制中。
0000000: 2100 80d2 4100 80d2 !...A...
我是否錯誤地使用了 objcopy?
uj5u.com熱心網友回復:
ARM 指令是 32 位小端字,因此如果以這種格式轉儲它們會更容易閱讀。使用xxd -e simple.bin哪些輸出:
00000000: d2800021 d2800041 !...A...
這是movz指令的正確編碼,請參閱 ARMv8 架構參考手冊。16 位立即數被編碼在位 5-20 中,這就是為什么數字 1 和 2 在十六進制表示中并不立即明顯,但它們在那里。(位 0-4 對目標暫存器進行編碼。)它們在二進制中更容易看到,但 xxd 似乎沒有 32 位小端二進制模式。
所以你的輸出檔案是完全正確的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/365362.html
上一篇:如何在任何系統上開始學習匯編語言
