2014-05-20 67 views
0

Im做一些功課和困惑回覆:這行代碼:IA32跳轉表

ja 8048448 <switch_prob+0x28> 

我理解除了一部分一切......這怎麼修改跳轉到8048448? (我相信這是突破聲明)

讓我知道是否需要更多的代碼。

感謝

+0

'怎麼是,修改jump' - 你什麼意思? 'ja'的意思是'如果上面跳'。也就是說,根據是否設置了某些標誌(一個值高於另一個值)來進行跳轉,通常是因爲「cmp」或算術指令。 –

+0

什麼是嗎? – gjnave

回答

1

<switch_prob+0x28>只是一個標籤+偏移反彙編器使用,使地址8048448看起來更對人類有意義。

1

@echristopherson已經正確地回答了你的問題:你有什麼存在的條件跳轉(ja代表跳躍如果上述)至8048448.當他還提到<switch_prob+0x28>被使用調試器或反彙編生成只是一個標籤參考8048448.這只是爲了提高可讀性,僅此而已。

我在這裏的貢獻是解釋說這與標題中提到的跳轉表沒有任何關係(IA32跳轉表)。使用跳轉表,您可以將目標地址存儲在內存中,並根據所述跳轉表執行間接跳轉。舉個例子,你可能有:

mov eax,0 
jump [jumptable+edx*4] 

jumptable: 
dd branch1 
dd branch2 

// ... 

branch1: 
lea edx,[somestring] 
mov ah,09h 
int 21h 

branch2: 
mov ax,4c00h 
int 21h 

當然,在這個例子中,以使eax更有意義初始值應該是動態的。

可能不適合到這個評論可以隨意上下票;)