[英]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.