назначить адрес памяти, указанный в argv, указателю в c - PullRequest
0 голосов
/ 02 марта 2019

У меня есть функция в C, которая получает указатель и печатает его код разборки.

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

все работает просто отлично, но теперь я хотел бы передать этот адрес памяти из командной строки как argv.

Как я могу передать адрес памяти и назначить его указателю, чтобы он работал следующим образом:

my_prog 0x1234567890abcd

и этот print_dis получит этот адрес как addr

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы можете преобразовать строку из 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
*/
0 голосов
/ 02 марта 2019

Простите, если я неправильно понял ваш вопрос, но вы можете взять указатель и использовать printf("%p", ptr);.Или, если вы хотите, чтобы ваша программа записывала в stdin другой программы, вы можете использовать, например, linux-трубопровод.

Вы также можете просто получить значение адреса char * из argv с помощью reinterpret_cast<WhateverType>(source);

...