簡體   English   中英

x86 系統調用訪問沖突寫入位置

[英]x86 syscalls access violation writing location

我正在做一個小項目,旨在從 ntdlls 導出中獲取系統調用 ID,然后做一些惡作劇來正確映射參數以調用它。 似乎我做的一切都是正確的,但是我的 asm 中出現了一個未處理的異常。

源代碼:

    mov    edx , ecx
    pop    ecx
    pop    eax
    mov    DWORD PTR [esp] , ecx ;  Access violation writing location 0x0000F8B8.
    mov    eax , DWORD PTR [esp+18h]

反匯編代碼:

 mov         dx,cx  
 pop         cx  
 pop         ax  
 mov         word ptr [si],cx ;  Access violation writing location 0x0000F8B8.
 and         al,67h  
 mov         ax,word ptr [esp+18h]
EAX = 00007B00 EBX = 00000000 ECX = 001F59F5 EDX = 43D2FFFF ESI = 43D2F8B8 
EDI = 43D2F450 EIP = 7B010CAD ESP = 43D2F33C EBP = 43D2F450 EFL = 00010246 

出於某種原因,您的反匯編似乎有 16 位指令(使用 16 位寄存器,如 cx、ax 等)。違規指令訪問 [si] 處的內存。 si 的值是 esi 的底部 2 個字節,這將導致 sub-0x10000 值,如 0x0000F9A8。 截斷地址的上半部分可能是導致錯誤的原因。 我不確定你用什么來組裝,但嘗試檢查它的命令行選項以確保你沒有設置 16 位標志或其他東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM