【问题标题】:How to extract address from c-string如何从c字符串中提取地址
【发布时间】:2013-11-09 19:50:10
【问题描述】:

我正在编写我的程序,我需要从 c-string 中获取一个指针。例如,我有一个像“0x3b021e01”这样的字符串,作为输出,我想要一个合法的指针 void *ptr == 0x3021e101。

我试过这种方法:

char *addr = "0x3021e101"; // this address is just an example of 32-bit addr

uint32_t iaddr = from_ch_to_hex(addr); // iaddr == 0x3021e101

void *data_buf = (void *)iaddr; // data_buf = 0x3021e101

uint32_t reg_val = *(uint32_t *)data_buf;

但是我得到了分段错误。这里有什么问题?我该如何解决?

【问题讨论】:

  • 嗯,它是一个合法的 uint32_t 地址吗?它看起来不正确 - 对齐错误。
  • 等一下 - 地址超过 32 位。这是一个 64 位指针吗?
  • 末尾的额外 '01' 是做什么用的?
  • 好的,现在更清楚了。您的架构和/或内存管理器是否支持访问未对齐的内存地址?
  • 更有趣 - 这段代码是在调试器服务器上运行还是在远程客户端上运行?

标签: c pointers char memory-address gdbserver


【解决方案1】:

0x3b021e101 是一个奇数,因此您可能会遇到对齐错误。

顺便说一句,除非你通过其他方式知道地址是有效的, 说有一个指向那个地址的指针,你为什么不直接用那个 指针?

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2011-02-22
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多