首页
社区
课程
招聘
[求助]如何去除掉c++编译出来dll中的一行代码?
发表于: 2015-1-5 12:09 5232

[求助]如何去除掉c++编译出来dll中的一行代码?

2015-1-5 12:09
5232
谷歌的CEF框架中有一段代码,主要是出错的时候会调用。
代码如下:
void BreakDebugger() {
  if (IsDebugUISuppressed())
    _exit(1);
  _debugbreak();
#if defined(NDEBUG)
  _exit(1);
#endif
}

因为调用了  __debugbreak(),会造成我程序在运行时候如果出错会弹出调试的窗口,想问一下通过什么工具,去修改这个libcef.dll,然后去掉__debugbreak的调用?
虽然CEF是开源的,但是要去编译他要去构建的编译环境真心麻烦。

我在每次出错的时候调试得到的断点如下:
第一次出错时调试:
0640C720   int         3  开始
0640C721   push        1
0640C723   call        079F7A58  结束
第二次出错时调试:
05FDC720  int         3   
05FDC721  push        1   
05FDC723  call        075C7A58

这是两次的结果,好像偏移值都差不多。
想问下要通过什么工具,怎么操作对这个dll进行修改呢?能够相应的说明一下步骤吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
2
不太了解你的意思,但是看代码,_debugbreak();应该是被汇编成了int 3了.

void BreakDebugger() {
  if (IsDebugUISuppressed())
    _exit(1);
  _debugbreak();
#if defined(NDEBUG)
  _exit(1);
#endif
}
看代码的意思如果IsDebugUISuppressed返回真.就直接_exit(1);

然后下面是
_debugbreak();
#if defined(NDEBUG)
  _exit(1);
#endif
一般发布出来的程序都是release版本,即已定义NDEBUG.那么可以看成
_debugbreak();
_exit(1);
那么这段代码就差不多了:
0640C720   int         3  开始
0640C721   push        1
0640C723   call        079F7A58  结束
int 3应该就是_debugbreak();
去掉int 3改成nop应该就可以了.
2015-1-5 12:33
0
雪    币: 579
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
nop掉
2015-1-5 12:36
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是这样子的,
这段汇编是我在程序出错的时候,使用VS进行调试得到了。
但是在正常情况下,我怎么去修改libcef.dll,找到这段代码,然后改成nop?
2015-1-5 13:43
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是这样子的,
这段汇编是我在程序出错的时候,使用VS进行调试得到了。
但是在正常情况下,我通过什么工具,在libcef.dll中找到这段代码,然后将其改成nop?
2015-1-5 13:53
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是这样子的,
这段汇编是我在程序出错的时候,使用VS进行调试得到了。
但是在正常情况下,我通过什么工具,在libcef.dll中找到这段代码,然后将其改成nop?
2015-1-5 13:54
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
VS反汇编里看下VA,计算出RVA,然后OD定位到代码,
或者OD里Ctrl + S搜索代码.
2015-1-5 14:02
0
雪    币: 183
活跃值: (563)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
8
没看明白。。直接用ida定位偏移 然后 用二进制编辑器 patch掉 不就行了?
2015-1-14 13:03
0
游客
登录 | 注册 方可回帖
返回
//