查找vs2015编译的可执行文件的OEP

本文介绍如何在Visual Studio中设置断点并进行调试,同时利用IDA反汇编工具查找main函数的具体位置及调用过程。通过具体步骤展示如何逐层深入地解析程序调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.写个简单的main函数
···
#include<iostream>
using namespace std;
int main() {
int a = 0;
int b = 1;
int c = 2;
double d = 2.2;
printf("hahaha");
return 0;
}
···
下断到return 0
查找vs2015编译的可执行文件的OEP
2.运行到断点
查找vs2015编译的可执行文件的OEP
3.反汇编运行到ret指令
查找vs2015编译的可执行文件的OEP
4.单步走进去 旁边就多了个文件
查找vs2015编译的可执行文件的OEP
5.点击文件
查找vs2015编译的可执行文件的OEP
发现不管是main还是winmain 都是 invoke_main() 调用的
···
static int __cdecl invoke_main() throw()
{
return main(argc, argv, _get_initial_narrow_environment());
}

static int __cdecl invoke_main() throw()
{
    return wWinMain(
        reinterpret_cast<HINSTANCE>(&__ImageBase),
        nullptr,
        _get_wide_winmain_command_line(),
        __scrt_get_show_window_mode());
}

···
查找vs2015编译的可执行文件的OEP
///////////////////////////通过ida查找///////////////////////////////
左边是win版 6.8 右边mac版7.0 发现7.0直接定位到main 这里从win版找
查找vs2015编译的可执行文件的OEP
1.第一步鼠标点到strat-0空格查看
查找vs2015编译的可执行文件的OEP
2.点到call 函数 sub_4118d0 空格进入(下面都说成点击进入call)
查找vs2015编译的可执行文件的OEP
3.点击call进入
查找vs2015编译的可执行文件的OEP
4.这里就有俩个call 要想找到main函数 都是一层层找 找关键点有3个push的
第一个进去看下肯定不是都系统调用 (中间会有个跳转表 后面的都有)
查找vs2015编译的可执行文件的OEP
查找vs2015编译的可执行文件的OEP

  1. 只有第二个call进去发现call更多 那没办法一个个找(先只找一层)
    6.我找过就直接定位到了:(特征码上面一般是 add esp 4)
    查找vs2015编译的可执行文件的OEP
    7.进去
    查找vs2015编译的可执行文件的OEP
    8.我怎么就知道是三个push呢 先一个个call看 看他有没有参数 没有参数就说明push的参数不是给他的
    9.这里进都不要进去就知道call只是一个跳转是一个参数 因些call sub_411276就是main函数
    10.进入main函数
    查找vs2015编译的可执行文件的OEP
    查找vs2015编译的可执行文件的OEP
    查找vs2015编译的可执行文件的OEP
    11.可以看出就是main他有三个参数
    查找vs2015编译的可执行文件的OEP
    invoke_main()函数调用他 对应函数
    查找vs2015编译的可执行文件的OEP
    12.继续走
    查找vs2015编译的可执行文件的OEP
    查找vs2015编译的可执行文件的OEP
    13.查看上一层( __scrt_common_main_seh())
    查找vs2015编译的可执行文件的OEP
    对应反汇编
    查找vs2015编译的可执行文件的OEP
    14.继续上一层( __scrt_common_main())
    查找vs2015编译的可执行文件的OEP
    对应汇编 (刚好有俩个call)
    查找vs2015编译的可执行文件的OEP
    查找vs2015编译的可执行文件的OEP
    15.继续上一层 (mainCRTStartup())
    查找vs2015编译的可执行文件的OEP
    对应反汇编 就是 start
    查找vs2015编译的可执行文件的OEP
    在ida中按x看谁调用我也就是上一层发现报错 也就是没了
    查找vs2015编译的可执行文件的OEP
    16.在vs中怎么那个快就知道上一层是谁呢 查看调用堆栈
    查找vs2015编译的可执行文件的OEP
    查找vs2015编译的可执行文件的OEP

转载于:https://blog.51cto.com/haidragon/2116951

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值