我正在閱讀教科書Randal E. Bryant, David R. O'Hallaron - Computer Systems. A Programmer's Perspective [3rd ed.] (2016, Pearson)
。我遇到了這個問題,我不知道作者是如何獲得答案的。
在下面這個被拆解的二進制檔案的摘錄中,一些資訊已經被X所取代。
請回答關于這些指令的下列問題。(在這里你不需要知道任何關于callq指令的資訊)。
下面的je指令的目標是什么?
40042f: 74 F4 je XXXXXX
400431: 5D pop %rbp
。
誰能幫助解釋一下為什么會有這樣的解釋?我不確定他們是如何獲得-12和0xf4的值,以及為什么需要它們來計算這里的je指令的目標。
uj5u.com熱心網友回復:
帶有即時值的跳轉指令是相對的,意味著它向前或向后跳轉X個位元組,而不是跳轉到一個絕對地址,所以指令本身的地址(或后面的指令,見下文)具有重要性。
偏移運算元是有符號的,而且是一個位元組長(因為74是短跳轉指令,允許跳轉范圍在-128和 127之間--有符號的8位整數的范圍)。因此,0xF4是負的(它最左邊的位的值是-0x80,而不是 0x80,它被設定了),它等于-0xC(因為0xF4-0x100=-0xC),或者在十進制中是-12。正如解釋中所說:
(因為0xf4是-12的1位元組的二進制補碼表示)
他們首先是如何獲得0xF4的。從指令(74F4--74是je short的操作碼,F4是偏移量)。
現在,跳轉的目標是通過將偏移量加上下一條指令的地址來計算的,在這個例子中是0x400431。(你可以想象一下,處理器首先讀取指令,使指令指標從指令的末尾前進到下一條指令的開始,然后才從指令指標的當前位置向前或向后應用跳轉。)
因此,0x4004的地址是在0x4004指令的末尾。
因此,0x400431 - 0xC = 0x400425.
注意:0x0x400431中多余的0x顯然是書中的一個錯字,它沒有任何意義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331323.html
標籤:

