0

我写了一个程序,我想实现每个字符串的输出,比如我从“字符串命令”收到的输出

int my_print(char *fmt, ...)
{
printf("%p\n",fmt);
}

int main()
{
my_print("Hello1 [%d]\n", 1);
my_print("Hello2 [%d]\n", 2);
my_print("Hello [%d]\n", 3);
my_print("Hello3 [%d]\n", 4);

它给了我输出

0x4006ac
0x4006b9
0x4006c6
0x4006d2

现在我执行了字符串命令“strings -tx a.out”,它给了我输出

200 /lib64/ld-linux-x86-64.so.2
    2c1 __gmon_start__
    2d0 libc.so.6
    2da printf
    2e1 __libc_start_main
    2f3 GLIBC_2.2.5
    639 l$ L
    63e t$(L
    643 |$0H
    6ac Hello1 [%d]
    6b9 Hello2 [%d]
    6c6 Hello [%d]
    6d2 Hello3 [%d]

我知道字符串在二进制文件 a.out 中为我提供了字符串的偏移量,但我想知道是否可以从偏移量开始的位置打印起始地址。例如,Hello1strings command输出显示“6ac Hello1 [%d]”,其中程序的输出显示 0x4006ac,我希望我的程序应该打印掩码值,并且可以说 6ac 是我应该从字符串命令中得到的输出。

4

1 回答 1

0

如果那是 C,那么您使用的变量参数不正确。

#include <stdarg.h>

int my_print(char *fmt, ...)
{
    va_list vl ;
    va_start( vl, fmt ) ;
    vprintf(fmt, vl);
}

int main()
{
    my_print("Hello1 [%d]\n", 1);
    my_print("Hello2 [%d]\n", 2);
    my_print("Hello [%d]\n", 3);
    my_print("Hello3 [%d]\n", 4);
}

请参阅C手册中的详细信息。

你所做的如下。你定义了一个带有可变数量参数的函数,但你从不使用这些参数。相反,您将其作为指向字符串的指针传递,并将其视为 printf 的参数,使用完全不同的格式作为格式。printf 正确地打印了您传递的字符串的指针(这是一种格式......)。

于 2012-10-10T09:22:36.020 回答