用VS做汇编开发环境的方法

 汇编编译器测试

看到大侠们不用引入表得到了函数地址,我也想试试,可是不想装其他的开发环境,我只熟悉VS,所以打算用vs2005来实验下汇编开发,经过几次调试,发现经过下面两步操作后,可以做到vs生成的结果和汇编环境生成的结果在逻辑上是一致的。

1.改入口点 /Entry:main ,不让我们的程序由CRT启动,而是由Kernel32.dll启动
2.给main函数增加 __declspec(naked) ,不让编译器为我们增加额外的代码

还没有解决的问题:win32汇编怎么搭建,可能是语法就不通过了

下面是我写的小部分代码,测试通过,可以得到kernel32.dll的模块地址,在此非常感谢大侠们的努力让我学到了更多的新东西

// 本程序实现了找到kernel32.dll的模块地址
int __declspec(naked) main()
{
    __asm
    {
        // esp:kernel中调用main函数之后返回的地址
        push ecx        
        mov ecx, [esp+4] //eax 现在是main函数返回之后的地址,这个地址一定在kernel32.dll模块之中
        xor edx, edx
        xor ebx, ebx
        // 以ecx为最大值向上搜索kernel的基地址
Label_FindImageBase:
        dec ecx
        mov ebx, [ecx+60]
        cmp ebx, 0f000h
        ja    Label_FindImageBase       
        inc edx
        mov eax, [ecx + ebx + 52]
        cmp ecx, eax
        jz Label_End:
        jmp Label_FindImageBase
Label_End:
        // ecx现在是kernel32.dll的模块地址了

    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值