簡體   English   中英

將asm指令編碼為操作碼

[英]Encode asm instructions to opcodes

我需要編寫一些像

mov eax, edx
inc edx

到相應的x86_64操作碼。 是否有任何庫(不是一個完整的asm編譯器)可以輕松實現這一目標?

您可以使用開源FASMNASM並使用其解析器。

如果你已經將它編譯成二進制文件(從你的asm或c嵌入asm):

objdump -S your_binary,它將列出每條指令及其二進制代碼。

假設您剛剛翻譯了簡單的指令,那么編寫一個簡單的匯編程序就不會那么有用了。 我之前已經完成了 - 你可能擁有反匯編程序組件的大部分邏輯和表(例如指令名稱和寄存器號的操作碼表 - 只需反過來使用它)。 我並不一定意味着你可以直接反向使用表格,但以適當的方式重新安排的表格內容應該做大部分的努力而不是太糟糕。

困難的是符號和搬遷等等。 但是因為你可能並不真的需要“找到這個代碼序列”,我猜你可以不用那些部分。 您也不需要為某些規范生成目標文件 - 您只需要一組字節。

現在,如果你想找到它會變得有點棘手:

here:
     inc eax
     jnz here
     jmp someplace_else
....
...
someplace_else:
     ....

因為你必須將跳轉編碼到它們的相對位置 - 至少,它需要一個兩遍方法,首先計算指令的長度,然后是跳躍目標的實際填充。 如果“someplace_else”遠離跳躍本身,那么它也可能是絕對跳躍,在這種情況下,您的“搜索”將必須考慮它與搜索位置的關系 - 因為該序列對於每個地址都是不同的。

我已經編寫了匯編程序和反匯編程序,如果您不必處理可重定位的地址和文件格式,並且您不知道這些奇怪的定義[直到您研究了格式的200頁定義,那么這並不難]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM