x86上包含 in64型別的結構體陣列反彙編跟蹤

2021-08-11 12:49:23 字數 1178 閱讀 4887

今天,根據dump分析如下**存在崩潰,

但是簡單看不出來是**有問題,

.ecxr檢視對應的崩潰語句

沒辦法,只好ida反彙編,關鍵幾個語句標註如下:

那麼mov     this, [ebx+eax*4-0ch]

這個語句是在幹什麼呢,

先看上一句

lea     eax, [esi+esi*2]

顯然這不是在計算乙個位址,結合最後的push引數順序,我們有理由猜想這裡在計算大小

檢視linechartdata結構體定義如下

struct linechartdata

;

time_t是__int64結構正好是uint的*2大小,所以我們猜這裡是在計算陣列pshowdata中資料是多少個uint大小那麼接下來eax*4 就是整個陣列的位元組數

但是這裡ebx+eax*4-0ch和ebx+eax*4-8是在幹什麼呢

結合上圖,最後標記的push語句,可以看到x86上傳送64位引數,是連續兩次push來完成的

因此ebx+eax*4-0ch和ebx+eax*4-8分別對應,pshowdata結構體倒數第乙個元素的__time64成員的低4位元組和高4位元組

那麼崩潰在

mov     this, [ebx+eax*4-0ch]

對應的語句就是

pshowdata[ncount - 1].mtime取值失敗,顯然又是個陣列越界錯誤。

檢視**,這裡沒有對ncount做大於1判斷,問題定位。

需要注意的是

1.陣列反彙編的結構是按照位元組來計算定位元素的

2.x86上__int64函式傳遞是分兩次push完成的

x86機器上執行arm64 docker

docker hub 上可以找到各種非 x86 64 平台的映象,但是在x86上直接執行會報錯 panic standard init linux.go 175 exec user process caused exec format error recovered 在 x86 64 平台上缺少執行...

x86與x64系統引導過程

1 機器上電自檢,完成裝置的列舉與配置 2 載入主引導記錄 mbr 並執行 3 讀活動分割槽中的引導分割槽到記憶體中,並執行 4 載入系統目錄下的ntldr 也就是系統的引導程式 5 ntldr初始化完成處理器模式切換和檔案系統 fat或ntfs 驅動載入,如果使用了scsi裝置,ntldr將ntb...

X86上4系統的安裝

x86上4系統的安裝 0.x86 pc 配置 cpu p4 2ghz ram 1gb hdd ide 120gb nic rt8139 video i865g sound ac97 1.分割槽布局 format grub win lin macosx sunos os name kenerl ver...