| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 75 人关注过本帖
标题:关于在c中内联汇编的一个问题
只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:132
专家分:98
注 册:2018-3-4
结帖率:83.67%
收藏
已结贴  问题点数:20 回复次数:1 
关于在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编辑过]

2025-03-15 22:20
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2585
专家分:275
注 册:2007-8-12
收藏
得分:20 
用的是msvc编译器吧,换成gcc试一下呢。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2025-03-17 15:21
快速回复:关于在c中内联汇编的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058734 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved