您的位置:首页 > 其它

自制反汇编逆向分析工具 迭代第六版本 (五)

2016-05-20 16:41 387 查看
本工具从最初版的跳转分布图只为了更直观地分析反汇编代码的分支结构,第三版开始对直观图进行逆向分支代码的输出第四版对分支输出策略的一些探索第五版结合之前的探索进行改进。第六版在现在功能的基础上进行增强,利用第六版(一)的基本功能-直译第六版(二)对条件分支增加条件判断翻译,以及改进在函数调用处附带备选参数参考

第六版(三)将(一)和(二)组合在一起进行逆向代码输出。

第六版(四),在(三)的基础上增加对原子操作指令的逆向以及c++函数的逆向。

本篇是(五),对待c风格的函数符号调用的翻译,通过导入c风格符号的函数原型来参考分析。

上一篇在介绍对待 c++风格的函数符号调用的情况,提到了c风格的函数符号没有太多的原型信息可供参考,但是它唯一不被重载,参数约定使用标准的约定,所以用古老(老土)的办法就好了。就是导入c风格符号的函数原型(主要是符号名和参数序列)。

CA::Transaction::run_deferred_visibility_layer_calls
{
// 0 pushq %rbp
// 1    rbp = rsp;
// 4 pushq %r15
// 6 pushq %r14
// 8 pushq %rbx
// 9 pushq %rax
// 10    r14 = rdi;
// 13    rbx = r14->_78;
// 17 testq %rbx, %rbx
// 20
if (!) { // 17 (0 == rbx)
_b22:     // from 81
// 22    r15 = rbx->_0;
// 25 testq %r15, %r15
// 28
if (!) { // 25 (0 == r15)
// 30    rdi = r15;
// 33 call
((CA::Layer*)r15)->call_did_become_visible();
// 38    eax = 0xffffffff;
// 43 lock
// 44    OSAtomicAdd32(eax, (volatile int32_t*)&r15->_0);
// 48 cmpl $0x1, %eax
// 51
if (!) { // 48 (eax != 0x1)
// 53    rdi = r15;
// 56 call
((CA::Layer*)r15)->~Layer();
// 61    edi = 0xb;
// 66    rsi = r15;
// 69 call
x_mem_dealloc_bucket(0xb, (void*)r15);
} // 74
} // 74
// 74    rbx = rbx->_8;
// 78 testq %rbx, %rbx
// 81
if () // 78 (0 != rbx)
goto _b22;
// 83    rdi = r14->_78;
// 87 call
x_list_free((x_list*)r14->_78);
// 92    r14->_78 = 0x0;
} // 100
// 100    rsp = rsp + 0x8;
// 104 popq %rbx
// 105 popq %r14
// 107 popq %r15
// 109 popq %rbp
// 110 ret
return;
// 111 nop
}


CA::Transaction::run_deferred_visibility_layer_calls
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: