堆記憶體訪問錯誤

2021-06-26 10:51:08 字數 1272 閱讀 2730

崩潰到ntdll.dll的問題

比較典型的無效指標(非法記憶體訪問),建議先解決符號問題,google或者參考《軟體除錯》中關於符號檔案的部分...

[關閉] height="600" src="/sda/topicdaleft.htm?v201305241723" frameborder="0" width="120" scrolling="no">

已經刪除的關鍵段物件進入ntdll可能會崩潰。

ntdll.dll檔案分析  ntdll - ntdll.dll - dll檔案資訊

dll 檔案: ntdll 或者 ntdll.dll  dll 名稱: nt layer dll

描述:ntdll.dll是nt作業系統重要的模組。

路徑位置:c:/windows/system32/ntdll.dll

屬於:windows nt  系統dll檔案:是

常見錯誤: file not found, missing file, exception errors

安全等級(0-5):0  間諜軟體:否  廣告軟體:否

xp的核心dll——ntdll.dll

開啟ntdll.dll,驚奇的發現原來crt的許多基本函式居然都是在這裡實現的!甚至包括qsort,ceil這樣的函式,還有臭名昭著的 strcpy(嚴格來講,這只能怪使用者不當心)。堆的釋放,程序管理,似乎都是在這。於是,我決定,仔細察看以下它,這1410個函式是做什麼的

使用者模式的**在呼叫系統核心函式的時候,首先把乙個叫做system call number的數放在eax中,把引數放在其它的暫存器中了。然後呼叫int 2e中斷。但是大部分應用程式並不需要直接這麼做。通常都是在呼叫kernel32.dll等時由他們來呼叫int 2e.

核心模式的**,做法稍微有點不同。他們通常呼叫由ntoskrnl.exe匯出的ntdll.dll中zw開頭的那一系列函式,比如 zwwaitforsingleobject, 反之,如果是使用者級**需要呼叫核心,就會利用int 2e呼叫waitforsingleobject.對於許多函式的批量呼叫,你會明顯發現 zw族要比rtl族效率高很多。

可惜ntdll.dll中的大部分函式都是undocumented.

對於一部分得知其定義形式的函式,可以這樣呼叫:

1.先將ntdll.dll讀入 loadlibrary(text(\「ntdll.dll\」))

2.利用getprocaddress 獲取其函式入口位址

3.利用得到的函式指標呼叫

cfiledialog

cstdiofile

AIX記憶體訪問錯誤

今天在測試公司的一組api時發生了記憶體訪問錯誤 aix5.1 64位機器,32位系統 這組api在編譯成32位的程式時測試是正確的,可是編譯成64位程式時問題就出現了 用malloc分配記憶體成功,但當用memset訪問這片記憶體時程式core了。我猜想是api某個地方的bug導致了記憶體洩漏,於...

部落格79 記憶體使用錯誤一 堆記憶體洩露

內容 記錄第一種比較容易出現的堆記憶體洩露的情況 記憶體洩露 編譯並且進行檢測,使用gcc編譯然後記得要加 g,然後執行valgrind工具 結果 分析 從圖中可以看到出現問題的 是 的,並且可以看到洩露的是200bytes,在圖中的leak summary那一項。這種是簡單的堆記憶體洩露情況,相信...

堆記憶體 棧記憶體

從堆和棧的功能和作用來通俗的比較,堆主要用來存放物件的,棧主要是用來執行程式的.而這種不同又主要是由於堆和棧的特點決定的 在程式設計中,例如c c 中,所有的方法呼叫都是通過棧來進行的,所有的區域性變數,形式引數都是從棧中分配記憶體空間的。實際上也不是什麼分配,只是從棧頂向上用就行,就好像工廠中的傳...