我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:荣兴彩票 > 反编译程序 >

c代码使用vs2010编译同一语句ida和ollydbg的地址不同; 并且与使

归档日期:05-09       文本归类:反编译程序      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部代码在进程中加载的地址不同,所以绝对地址不同。编译也是因为同样的原因。更多追问追答追问ollydb显示的地址不是VA吗?

  而且我用vc6.0编译时ida和ollydbg同一语句显示的地址相同追答记得是vs2010写入exe文件的基址和vc6有不同,这个基址是由编译器写入exe中,这个基址用于建议运行时的loader将入口点函数放入进程的起始位置。但loader也可以不接受这个起始地址而使用固定的起始地址做为所有程序的基址,vs2010和vc6的基址不同,两个软件应该是对基址的处理策略不同。追问图中圈出来的指令,在ida中可以看出是在text节中的,一般pe文件的image base是在0x400000,但是在ollydbg中的地址显然是不可能在text节中,甚至连image base都不是0x400000.

  是的,image base是由编译器或者运行时的Loader来自行决定的,尤其是DLL动态库的base地址,编译器提供的只能作为参考,例如有好几个DLL都要加载到一个基址,就只能由loader来设定了。

  原因:虽然VS2010和VC6编译的都是同样的代码,编译出来的程序功能大体一样,但是他们编译出来的程序细节不一样。就像叫两个不同的人来画圆圈,虽然画出来的都是圆圈,但是并不是绝对一样的;叫两家不同的汽车公司生产汽车,虽然都能跑,功能、外形完全一样,但是内部结构却千差万别。

  第一个问题:同一个程序(不能是一个VS 6 编译 一个VS 10 编译;也不能是一个先编译的,另一个晚一点编译的。),同一语句,ida和ollydbg的地址不同。

  IDE是在文件中静态反编译,OD是让系统把文件加进内存 运行 后再进行动态反编译,显示出来的地址计算方式不一样(具体的不同我不大记得了,模糊地记得两个使用的都是VA地址,不过标准不同。),所以地址不一致。会发生同样情况的还有C32Asm、D32Asm等静态反编译软件和OD、vs dbg等调试器显示地址不一样。

  解决方案:1、手动计算:虽然他们的地址不一致,但是所有的地址差值都是相等的。比如同一句,在IDE显示100,在OD显示200,他们的差就是100,这个差永远不变。

本文链接:http://flordelotus.net/fanbianyichengxu/183.html