将 argv 给出的内存地址分配给 c 中的指针
assign a memory address given by argv to a pointer in c
我在 C 中有一个函数,它获取一个指针并打印其反汇编代码。
void print_dis(void *addr) {
print_dis(addr);
}
一切正常,但现在我想从命令行将此内存地址作为 argv 传递。
我如何传递一个内存地址并将其分配给一个指针,这样它就会运行像:
my_prog 0x1234567890abcd
并且 print_dis 将得到这个地址作为 addr
如果我误解了你的问题,请原谅我,但你能不能指点一下,使用printf("%p", ptr);
。或者,如果你的意思是让你的程序写入另一个程序的标准输入,你可以使用 linux 管道,例如。
您也可以使用 reinterpret_cast<WhateverType>(source);
从 argv 中获取 char* 地址的值
您可以将字符串从 argv[1] 转换为 unsigned long 并使用转换运算符 (void*) 将其分配给通用指针,如示例所示 bellow.Be 小心,这很危险!
#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
*/
我在 C 中有一个函数,它获取一个指针并打印其反汇编代码。
void print_dis(void *addr) {
print_dis(addr);
}
一切正常,但现在我想从命令行将此内存地址作为 argv 传递。
我如何传递一个内存地址并将其分配给一个指针,这样它就会运行像:
my_prog 0x1234567890abcd
并且 print_dis 将得到这个地址作为 addr
如果我误解了你的问题,请原谅我,但你能不能指点一下,使用printf("%p", ptr);
。或者,如果你的意思是让你的程序写入另一个程序的标准输入,你可以使用 linux 管道,例如。
您也可以使用 reinterpret_cast<WhateverType>(source);
您可以将字符串从 argv[1] 转换为 unsigned long 并使用转换运算符 (void*) 将其分配给通用指针,如示例所示 bellow.Be 小心,这很危险!
#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
*/