首页
社区
课程
招聘
[原创]修正lldb-310及以后版本的Thumb反汇编问题
发表于: 2015-1-18 01:25 19501

[原创]修正lldb-310及以后版本的Thumb反汇编问题

2015-1-18 01:25
19501
void
Target::SetExecutableModule (ModuleSP& executable_sp, bool get_dependent_files)
{
    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TARGET));
    //ClearModules(false);
    ModulesDidUnload (m_images, false);
    //m_section_load_history.Clear();
    m_images.Clear();
    m_scratch_ast_context_ap.reset();
    m_scratch_ast_source_ap.reset();
    m_ast_importer_ap.reset();
    
    if (executable_sp.get())
    { ... }
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (21)
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
吐个槽
LLDB的代码总体结构很优秀,但局部实现就是一堆补丁。貌似开源项目都是这个风格~。
2015-1-18 02:14
0
雪    币: 14
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
太棒了,这个方案总算是可以解决新版LLDB上的bug了!楼主能在bbs.iosre.com上也发一份嘛,作为iOS应用逆向工程目前的官方解决方案推广出去,让国外的iOS开发者也能看到
2015-1-18 10:03
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
4
不知道能否从源码编译来修正这个问题?这样修改感觉还是不太通用

只是处理ARM反汇编的话,之前写了个capstone的脚本可以处理这个,并且会根据CPSR判断是Thumb还是ARM代码:
上传的附件:
2015-1-18 10:36
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
5
不知capstone能否处理单步指令?

LLDB的单步时要需要反汇编当前指令并模拟执行。dis,s和n的反汇编过程是同一过程,如仅是增加一个能够正确dis的命令,并不能解决反汇编不正确导致的无法单步跟踪的问题。

修改源码肯定是可以的,但是找到ObjectFileMachO.cpp中的问题需要一些时间。如果能定位问题,可以直接在源码中修正这个问题。
2015-1-18 13:44
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
6
等找到完美方案在贴过去吧~。很可能就是符号解析的问题。
2015-1-18 13:48
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
7
不能处理单步。确实,lldb单步时用的是内部的反汇编,所以我一般是根据IDA在关键位置多下些断点
或者干脆用脚本实现s/n的功能,"在下一行地址下断点->run->输出类似trace的指令->清除之前的断点..."
2015-1-18 17:31
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
8
版主给加个精呗。这个账号注册近十年了,差一篇就是高级会员了。
2015-1-19 08:35
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错,多谢分享。
2015-1-19 18:32
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
10
更新了修改代码的方法,赞一个!
2015-1-19 21:25
0
雪    币: 435
活跃值: (172)
能力值: ( LV13,RANK:280 )
在线值:
发帖
回帖
粉丝
11
你多久没发过东西了?
2015-1-20 15:54
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
12
[QUOTE='火翼[CCG];1347622']你多久没发过东西了?[/QUOTE]

Long long ago. 终于混到高级会员了。你不会是在邮轮上还看论坛吧?
实在厌倦了xcode-select. 所以研究下怎么修这个Bug.
2015-1-20 21:19
0
雪    币: 3279
活跃值: (3331)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
话说你有反馈给llvm嘛,这玩意确实够呛的,不过话说你是patch掉lldb呢,还是自己从新编译了~你说的这玩意应该是在/Applications/Xcode.app/Contents/SharedFrameworks /LLDB.framework/Versions/A/LLDB中吧
2015-1-21 14:29
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
14
编译LLDB和直接修改文件我都试过. LLDB的核心确实在LLDB.framework中.

要正确的修正此问题,相关的代码需要重构,已记录此bug,等待修复。
2015-1-21 14:38
0
雪    币: 435
活跃值: (172)
能力值: ( LV13,RANK:280 )
在线值:
发帖
回帖
粉丝
15
已经回来了,邮轮上网络10美元/小时
2015-1-22 10:40
0
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢LZ分享~~~~~~~
2015-1-27 14:46
0
雪    币: 3279
活跃值: (3331)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
不知道,楼主,是否有调试过apple的2个原版的lldb-300.2.47.tar 和 lldb-310.2.36?
在到作者说的void
Target::SetExecutableModule (ModuleSP& executable_sp, bool get_dependent_files),此函数之前,在获取arch就已经出了问题了~
2015-1-27 17:42
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
18
此问题并非是因target.arch错误导致的,而是由符号信息异常导致的。出现异常的原因请参考相关邮件。

请前往 lldb-dev Jan 2015 Archieve
并搜索主题为 Misinterpreting Symbols Issue since LLDB-310 的邮件
2015-1-28 10:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
从新开始学习,还没看懂,技术进步真快啊
2015-1-30 09:47
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
20
能否提供一个编译好的版本,并稍微介绍下如何替换与使用.方便新手:)
2015-8-17 18:32
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
21
提供一个现象
iPhone4的debugserver_armv7,采用lldb调试成功且可以正常显示thumb指令.
iPhone5的debugserver_armv7与debugserver_armv7s,采用lldb调试成功,但不可以正常显示thumb指令,会解释成arm指令.
2015-8-18 11:43
0
雪    币: 312
活跃值: (123)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
22
mark
2016-7-14 15:53
0
游客
登录 | 注册 方可回帖
返回
//