Byte(address)
Word(address)
Dword(address)
当我尝试执行以下操作时:
Byte(address) = value
IDA表示分配给函数调用无效。我尝试使用ctypes,但是IDA在网上说了未处理的异常:
谢谢。
#1 楼
Byte()
,Word()
和Dword()
是idapython的函数,每次尝试在python中为函数调用分配值的操作都将以“ SyntaxError:无法分配给函数调用”结尾。提到的用于读取给定地址的值,无论是字节,字还是双字。您不能使用它们为地址设置值。 修补
要修改内存位置,可以使用以下功能之一:
先前的IDA 7.0:
PatchByte(ea, value)
更改程序字节的值
如果调试器处于活动状态,则调试的过程存储器也将被修补
PatchWord(ea, value)
更改程序字的值(2个字节)
PatchDword(ea, value)
更改双字的值
PatchDbgByte(ea, value)
仅更改调试过程存储器中的字节
如果要获取发生任何更改之前已存在的原始字节,则应使用:
GetOriginalByte(ea)
获取原始值程序字节的说明
IDA 7.0:
自从IDA 7.0到来以来,idapython进行了一些值得一提的更改。的功能已更改为
patch_byte()
,patch_word()
,patch_dword()
,patch_dbg_byte()
和get_original_byte()
ac诚然,但是到目前为止,您仍然可以使用旧名称,因为负责兼容性的“ IDA 7.0 / Python / idc_bc695.py”包含了这些函数的包装器。此外,添加了另一个功能:
patch_qword(ea, value)
更改四字的值
注意,
PatchQword()
不会为您工作,因为它在较早的版本中不存在,因此没有理由将其创建为patch_qword()
的包装,以实现兼容性。字节非常直观:from idaapi import *
address= 0x67643021
new_value = 0xCC
PatchByte(address, new_value)
这将编辑IDB文件,以将0x67643021的值设置为0xCC。这不会影响origianl文件。如果只想编辑内存中的地址值而不是IDB文件中的地址,则应使用
PatchDbgByte()
而不是PatchByte()
。您需要像这样自己制作:address= 0x67643021
new_value = 0xCC
# Open the file
f = open("my_binary.exe", "rb+")
# Seek to the address you want to patch
f.seek(address)
# Write the new value to this address
f.write(new_value)
# Close the file
f.close()
您可以查看Alexander Hanel的fwrapper.py和Peter Kacherginsky的ida-patcher来查看一些可能对您有用的代码示例。
#2 楼
from idaapi import *
from idautils import *
print Byte(ScreenEA())
PatchByte(ScreenEA(),100) <--- this will patch the byte at current address to 0x64
print Byte(ScreenEA())