现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

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

2013-09-16 19:51 工业·编程 ⁄ 共 828字 ⁄ 字号 暂无评论

    看到大侠们不用引入表得到了函数地址,我也想试试,可是不想装其他的开发环境,我只熟悉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的模块地址了

    }
}

给我留言

留言无头像?