码迷,mamicode.com
首页 > 编程语言 > 详细

反汇编 c++/c 确定main函数的位置

时间:2015-04-30 16:18:26      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:反汇编   od   

用OD加载文件的时候,不会停留在main函数上,如何确定main 的位置,这就需要对程序加载过程有个了解。
使用IDA就可以准确定位main 函数的起始位置。

void __cdecl start()
{
  DWORD v0; // eax@1
  int v1; // eax@4

  v0 = GetVersion();
  dword_4101A4 = BYTE1(v0);
  dword_4101A0 = v0;
  dword_41019C = BYTE1(v0) + (v0 << 8);
  dword_410198 = v0 >> 16;
  if ( !sub_4068EE(0) )
    fast_error_exit(0x1Cu);
  _ioinit();
  dword_411704 = *GetCommandLineA*();
  dword_41017C = __crtGetEnvironmentStringsA();
  _setargv();
  _setenvp();
  _cinit();
  dword_4101B8 = envp;
  v1 = main(argc, argv, envp);
  exit(v1);
}

可以看到,main函数开始之前,有很多的初始化工作。OD不会全部识别,唯一可以识别的函数是GetCommandLine,在此函数执行之后,一般要再次调用4个函数__crtGetEnviromentStrings、setargv、setenvp、cinit,此后才会执行main 函数。
技术分享
因此,只要在GetCommandLine后跳过4个函数,一般就可以到达main 函数的位置。

如果你不想使用IDA加载程序来获得main函数位置,使用此方法可以快速找到main函数。是不是跳过4个,一般而言与编译器有很大的关系,所以,此方法只能算作经验积累。

反汇编 c++/c 确定main函数的位置

标签:反汇编   od   

原文地址:http://blog.csdn.net/bugmeout/article/details/45394889

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!