我有一個關於編碼的問題,因爲我剛開始使用Intel64反彙編。指令jmp *%rsp
將如何編碼?由於它使用*
(指針),所以我有點困惑。這是否使編碼特別?我似乎無法在手冊中找到任何內容?這條跳轉指令如何在Intel64中編碼?
到目前爲止,我猜jmp *%rsp
應該被編碼爲:ff c0
考慮到正在使用的寄存器等。ff c0
將是正確的,還是我誤會?
我有一個關於編碼的問題,因爲我剛開始使用Intel64反彙編。指令jmp *%rsp
將如何編碼?由於它使用*
(指針),所以我有點困惑。這是否使編碼特別?我似乎無法在手冊中找到任何內容?這條跳轉指令如何在Intel64中編碼?
到目前爲止,我猜jmp *%rsp
應該被編碼爲:ff c0
考慮到正在使用的寄存器等。ff c0
將是正確的,還是我誤會?
爲什麼不把它餵給彙編器?順便提一句,這是ff e4
。 ff c0
是inc %eax
。
*
表示間接跳轉到& t語法。有必要區分jmp foo
和jmp *foo
,其中前者是簡單的相對跳轉,但後者是通過指針間接跳轉。在這種情況下,*
是可選的,因爲它不含糊(儘管它會觸發警告)。對應部分將是jmp *(%rsp)
,並且括號不同。
該指令的intel指令集參考條目是ff /4 jmp r/m64
。 在modr/m編碼表2.2中查找/4
,我們看到esp
(在64位模式下映射到rsp
)的值確實是e4
。
隨意使用在線彙編:https://defuse.ca/online-x86-assembler.htm#disassembly
ff e4 jmp rsp