gpt4 book ai didi

c - 如何强制 C 程序打印意外结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:28 24 4
gpt4 key购买 nike

square.c的源码是:

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

int square(int *ptr)
{
int a;
a = *ptr;
return a * a;
}

int main(int argc, char **argv)
{
int a, aa;
srandom(time(NULL));
a = random() % 10 + 1;
aa = square(&a);
printf("%d\n", aa);
return 0;
}

编译源代码的命令行是:

gcc square.c -o square

是否可以在 Linux 中运行 square 可执行文件,以便打印的值不是是任何整数的平方?

任何运行程序的方法都是允许的。

最佳答案

是的。我们可以覆盖 printf。

把你帖子里的代码写成square.c,用gcc square.c编译

制作这个文件,fakesquare.c

int printf(char *str,int i)
{
return puts("7");
}

将 fakesquare.c 编译为共享库:

gcc -fPIC -o libfakesquare.so -shared fakesquare.c

使用预加载的 libfakesquare.so 运行 square 程序:

[15:27:27 0 /tmp] $ LD_PRELOAD=./libfakesqare.so ./a.out7[15:29:16 0 /tmp] $ LD_PRELOAD=./libfakesqare.so ./a.out7[15:29:16 0 /tmp] $ LD_PRELOAD=./libfakesqare.so ./a.out7

没有预加载 libfakeshared.so:

[15:29:40 0 /tmp] $  ./a.out36[15:29:41 0 /tmp] $  ./a.out16[15:29:42 0 /tmp] $  ./a.out64

关于c - 如何强制 C 程序打印意外结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com