我尝试将一个char [] / char *从gdb.value解析为bytearray或一个int列表等。
遵循c:
中的测试代码int main(int argc, char *argv[])
{
char img[] = {0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF};
char* imgp = img;
return 0;
}
首先尝试:
v = gdb.parse_and_eval("img")
print(v)
l = list(bytearray(v))
输出:
~"\"\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\\000\\377\"\n"
TypeError: 'gdb.Value' object is not iterable\n"
yay a string!?没有gdb.value - >不可迭代:(但索引能......好吧
data = []
for i in range(0, 27):
data.append(int(v[i]))
结果:
Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 0x7ffc737be000:
好吧,让我们以“安全”的方式做到:
v = gdb.parse_and_eval("img")
inferior = gdb.selected_inferior()
mem = inferior.read_memory(v, 27)
结果:
Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 0x7ffc737be000:
好的,怎么了?如何从gdb.value类型中获取此数据?