如何在 IDA Python 中以编程方式设置虚拟“T”寄存器?

逆向工程 艾达 蟒蛇
2021-06-19 15:07:29

使用Alt+G来自 GUI 的命令来完成它是微不足道的

但是,当我以编程方式设置多个断点时,IDA 不会将它们识别为“拇指”模式并将T断点地址处的值设置0. 当 IDA 尝试使用 ARM 模式而不是 Thumb 时,它肯定会崩溃。

T手动设置值50次应该太慢了。

所以,我尝试以T = 1编程方式设置

但是,我不知道该怎么做。

我试过这个:

idaapi.set_sreg_at_next_code(function_pointer, function_pointer + 2, idaapi.str2reg("T"), 1)

还有这个:

idaapi.set_default_sreg_value(idaapi.getseg(function_pointer), idaapi.str2reg("T"), 1)

IDA 只是忽略这两个调用,不会发生错误,但T值不会改变。

有谁知道如何T在 ARM 模式下使用 IDAPython更改虚拟段寄存器值?

1个回答

我自己找到了解决方案。正确代码如下:

idaapi.split_sreg_range(instruction_pointer, idaapi.str2reg("T"), required_t_value, idaapi.SR_user)

instruction_pointer你想改变哪种模式的指令地址在哪里required_t_value是新模式(1对于 Thumb,0对于 ARM),以及