关于在c中内联汇编的一个问题
不知道为什么我不能在内联中对ebp进行操作了我记得以前可以的啊
如下
mov ebp,esp就会报错:框架指针寄存器“ebp”被内联程序集代码修改
即便跳过这个步骤还会报个这样的错误: 写入程序数据库“C:\Use......pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够
贴上全部代码,希望有人能告诉我原因

#include <stdio.h> #include <stdlib.h> #include <Windows.h> int main() { //Win7 32位系统下 //本例程实现,自己构建由三环到零环的OpenProcess函数的调用 HANDLE a; _asm { //模拟进入Kernel32.dll中的openprocess push 0xcc4 ;某个进程的pid push 0x0 push 0x1fffff sub esp,0x4 ;模拟call后的堆栈变化 //模拟进入KernelBase.dll中的openprocess push ebp mov ebp, esp sub esp, 0x20 push esi xor esi, esi ; 开始对局部变量进行入参ebp - 4 --ebp - 20, 两个结构体, 共8个成员 ; 入参cli结构体第二个参数 mov dword ptr ss : [ebp - 0x4], esi ; 入参cli结构体第一个参数 mov eax, dword ptr ss : [ebp + 0x10] mov dword ptr ss : [ebp - 0x8], eax ; 入参obj结构体第六个参数 mov dword ptr ss : [ebp - 0xc], esi ; 入参obj结构体第五个参数 mov dword ptr ss : [ebp - 0x10], esi ; 入参obj结构体第四个参数 mov eax, dword ptr ss : [ebp + 0xc] neg eax sbb eax, eax and eax, 0x2 mov dword ptr ss : [ebp - 0x14], eax ; 入参obj结构体第三个参数 mov dword ptr ss : [ebp - 0x18], esi ; 入参obj结构体第二个参数 mov dword ptr ss : [ebp - 0x1c], esi ; 入参obj结构体第一个参数 mov dword ptr ss : [ebp - 0x20], 0x18 ; 开始压栈进内核所需参数 lea eax, dword ptr ss : [ebp - 0x8] push eax lea eax, dword ptr ss : [ebp - 0x20] push eax push dword ptr ss : [ebp + 0x8] lea eax, dword ptr ss : [ebp + 0x10] push eax //模拟进入ntdll.dll中的ntOpenProcess add esp, 0x4 mov eax, 0xBE mov edx, 0x7FFE0300 call edx sub esp, 0x10 cmp eax, esi pop esi jl dword ptr [0x75D4753C] mov eax, dword ptr ss : [ebp + 0x10] leave retn 0xC } printf("handel = %x\n", a); system("pause"); return 0; }
[此贴子已经被作者于2025-3-15 22:42编辑过]