Delphi 使用MAP檔案查詢程式位址類錯誤行

2021-10-08 18:01:12 字數 1099 閱讀 6459

----省略----

line numbers for unit1(unit1.pas) segment .text

32 0001:0004e8c8    33 0001:0004e8c9    34 0001:0004e8ce    35 0001:0004e8d4

38 0001:0004e8d8    39 0001:0004e8f4    40 0001:0004e978    42 0001:0004e9e4

42 0001:0004e9eb

.......

注釋: line numbers行下格式

32 0001:0004e8c8

第乙個數字代表在源**中的**行號,第二個數是該**行在所屬的**段中的偏移量。

如果要查詢**行號,需要使用下面的公式做一些十六進製制的減法運算:

崩潰行偏移 = 崩潰位址(crash address) - 基位址(imagebase address) - 0x1000

為什麼要這樣做呢?我們得到的崩潰位址都是由 偏移位址+ 基位址 得來的,所以在計算行號的時候要把基位址減去,一般情況下,基位址的值是 0x00400000 。另外,由於一般的 pe 檔案的**段都是從 0x1000 偏移開始的,所以也必須減去 0x1000 。

(基位址可以通過 project->options, 在頁面中有乙個image base值,就是它了)

如果你不知道十六進製制如何計算,那麼就按照我上面btn2下的**,將得到的 0044f8d1 崩潰行位址輸入=>

得到 0004e8d1

再看:line numbers for unit1(unit1.pas) segment .text

32 0001:0004e8c8    33 0001:0004e8c9    34 0001:0004e8ce    35 0001:0004e8d4

38 0001:0004e8d8    39 0001:0004e8f4    40 0001:0004e978    42 0001:0004e9e4

42 0001:0004e9eb

找出 小於等於 0004e8d1 的數(最接近的數,且不能大於) -->34 0001:0004e8ce.

原始碼中的錯誤行即為 34!

delphi下檔案查詢findfirst

findfirst 是用來尋找目標目錄下的第乙個檔案,findfirst函式在delphi幫助下的定義 function findfirst const path string attr integer var f tsearchrec integer 其中有一句 findfirst returns...

delphi 使用INF檔案

if you need to install an inf file using delphi,you could use the next code uses shellapi function installinf const pathname string hparent hwnd boole...

使用Map和模糊查詢

在某些時候我們只需要給mybatis傳遞幾個引數而不是乙個完整的物件,如僅僅update表中的兩三個屬性。此時parametertype設定為乙個pojo顯然不合適。可以考慮使用map 使用map傳遞引數在sql中直接取出key即可 update mybatis.employee set last ...