【问题标题】:assign a memory address given by argv to a pointer in c将 argv 给定的内存地址分配给 c 中的指针
【发布时间】:2019-03-02 15:20:28
【问题描述】:

我在 C 中有一个函数,它获取一个指针并打印它的反汇编代码。

void print_dis(void *addr) {
    print_dis(addr);
}

一切正常,但现在我想从命令行将此内存地址作为 argv 传递。

如何传递内存地址并将其分配给指针,以便它运行如下:

my_prog 0x1234567890abcd

而 print_dis 将把这个地址作为 addr 获得

【问题讨论】:

  • 您是否正在寻找类似strtoull() 的功能?也许像void *addr = (void*) strtoull(argv[1]+2, 0, 16);
  • strtoull 会返回一个新的 long long 值,它与字符串具有相同的值,对吧?我怎样才能将它用作地址?
  • 您可以将“program1”的标准输出重定向/管道传输到您的第二个程序的标准输入吗??
  • 不是真的,我也想对内核模块使用相同的方法
  • 你可以重定向内核模块的输出,不是吗? >

标签: c pointers memory argv


【解决方案1】:

您可以将字符串从 argv[1] 转换为 unsigned long,并使用强制转换运算符 (void*) 将其分配给通用指针,如下例所示。小心,这很危险!

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
   void* ptr = (void*) strtoul(argv[1]+2,0,16);

   printf("%lX", (unsigned long) ptr);

}.
/*
Output:
/a.out 0x123456789abcdef
Result ptr:123456789ABCDEF
*/

【讨论】:

    【解决方案2】:

    如果我误解了你的问题,请原谅我,但你能拿走指针并使用printf("%p", ptr);。或者,如果你的意思是让你的程序写入另一个程序的标准输入,你可以使用例如 linux 管道。

    您也可以使用 reinterpret_cast&lt;WhateverType&gt;(source); 从 argv 获取 char* 地址的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多