2015-08-08 42 views
0

我可能不明白asmx86足夠了,所以如果有明顯的答案,我很樂意提供它。我做了一些Google搜索,但沒有真正出現,說:「這是你的答案!」這是公平的,可能意味着我在問這個問題。在asmx86的十六進制視圖中跳轉<location> homework.exe

使用/ in/on(這三個之一)的x86 intel架構,我發現它很容易找到jmps( )在我的practice.exe文件的十六進制視圖中。所有的7c,78,79等等(對我有幫助的鏈接:Intelx86 http://unixwiz.net/techtips/x86-jumps.html對我來說已經開始足夠突出,我可以用一點麻煩去挑選他們了)

我似乎無法找出是十六進制視圖隱藏我的jmp位置的地方

它們總是在jmp命令後面設置,我只是..我不知道,沒有複製或更改足夠的字節來使我的作業程序工作,或者是否曾經只有十六進制jmp,我是不是會找到一個明確的翻譯或參考某個特定的short_loc?

任何幫助,相關鏈接和/或參考將不勝感激

(不太確定'內存管理'是否是一個準確的標籤。如果不相關,將刪除)

+0

什麼是「jmp位置」?如果這是將IP移動到*(通常稱爲「目的地」)的位置,那麼請解釋爲什麼您認爲它應該是「在jmp命令之後」 - 您可以在代碼中向前跳*或* ,並通過少量或更多的指示。也許你應該發佈你遇到問題的彙編代碼。 – usr2564301

回答

0

如果您只是在查看十六進制轉儲,請注意並非所有的7C,78,79等實際上都是跳轉,因爲不是所有的都是操作碼。您需要正確拆卸。至於跳轉位置,相對跳轉使用當前地址(實際上是下一條指令的地址)的偏移量進行編碼。偏移量在操作碼之後,但大小取決於指令。

一如既往,請參閱官方的intel指令集參考。

0

操作碼(和一些說明他的子碼)一短跳轉的(條件跳轉也短),有一個單字節指向相對位置之後。如果該字節低於128,則必須將其添加到jmp操作碼的位置以查找目標。否則,你必須減去二進制補碼。

操作碼後不久的跳躍有一個絕對位置(16位16位在可執行文件,32位在32位可執行文件或在64位的64位的可執行文件)。

+0

__near jump__也有__relative編碼的操作數___。例如'jmp There' – Fifoernik