Python:将gdb.value解析为bytearray

时间:2016-03-23 10:47:07

标签: python c gdb

我尝试将一个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类型中获取此数据?

0 个答案:

没有答案