1.我有不同的内存地址集,它们对应于一系列过程调用所使用的地址。这些是通过使用valgrind及其工具污点研磨进行动态二进制分析的过程收集的。
BI1:[400b000, _IO_file_underflow@@GLIBC_2.1]
BI2:[_IO_default_uflow, 400b000]
BI3:[main, beefc247, beefc200]
BI4:[BF_cbc_encrypt, beefaf6c, beefc200]
BI5:[BF_encrypt, beefaf6c, beefaf70]
BI6:[beefc1fc, beefafe4, BF_cbc_encrypt, beefaf70]
BI7:[beefafa4, beefb18c,beefb17c,beefafe4, CRYPTO_cfb128_encrypt]
BI8:[beefaf84, BF_cbc_encrypt, beefaf30]
BI9:[BF_decrypt, beefaf2c, beefaf30, beefaf18]
BI10:[beefaf38, beefaf2c, beefaf84, BF_cbc_encrypt,beefc1f4]我需要迭代这些集合,并检索这些addresses.these地址的数据,这些地址是执行河豚和高级加密标准的程序中使用的diff缓冲区的起始地址。
可以通过cpp或java中的某种方法获取数据吗? 2.为什么下面的代码显示分段错误?
char *p;
p=(char *)0xbff83c40;
printf("value of p:%p",p);
printf("value at p:%c",(char)*p);有人能帮我解决这个问题吗?
发布于 2015-05-01 01:30:04
看起来你在内存中有几个地址,你想从这些数字开始获取缓冲区的值。还有来自valgrind的地址,这意味着程序是在过去的时间内运行的,并且它的操作已经完成。
抱歉,您可以检索这些值,因为内存地址来自程序运行时堆栈/heep。一旦程序完成了它的操作,内存很可能会释放给另一个应用程序。那么这些地址将会有一些其他的数据。有时,这些地址可以包含您的程序值,但不能保证这些值的准确性。
注意,如果你想获得程序的地址值,你可以使用调试器.它允许你在运行时读取程序的地址值。
https://stackoverflow.com/questions/29973342
复制相似问题