【问题标题】:Get memory address from input. C从输入中获取内存地址。 C
【发布时间】:2015-11-29 12:51:26
【问题描述】:

我正在尝试制作一个程序,它可以获取代表 48 位地址的字符串,例如“0x7f1241249000”,并访问该给定虚拟地址的内容。输入的地址应该是合法的,因为它是从内存映射文件的结果中得到的。 因此我知道此类文件的分配位置。

我试图实现的目标是在屏幕上逐字节打印映射文件的内容,但我无法将字符串转换为相应的内存地址。

编辑 好的,现在我可以将字符串视为指向给定地址的指针。但是现在当我尝试访问映射文件的内容时,我遇到了分段错误。 我在代码中所做的是: char * 地址 = (char *) strtoull(input, NULL,16); 诠释我; for(i=0; i

使用 gdb 并显示地址输出正确的地址以及映射文件的内容,但 printf 崩溃。 抱歉,如果这是一个愚蠢的问题,我对 C 有点陌生

【问题讨论】:

  • 不要这样做。寻找其他方式。

标签: c string memory input memory-address


【解决方案1】:

使用sscanf 将字符串转换为unsigned long long,然后将其转换为char *,然后从该地址打印字节。

【讨论】:

  • strtoull(3)?此外,将指针存储为数值的正确类型是 uintptr_tintptr_t
  • @FilipeGonçalves:sscanfstrtoull 都不会给你那些指针作为数字的类型,所以使用它们不会带来任何有用的东西。
  • 无论哪种方式,如果您对sscanf(3) 使用%p 转换说明符,则无需中间转换步骤。
  • @FilipeGonçalves:我仍然不明白为什么我在地址 [0] 上遇到分段错误,而它在调试器上工作得很好。我也不太明白我应该如何在我的代码中使用 scanf 调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2018-09-09
相关资源
最近更新 更多