gpt4 book ai didi

c - Hook 类似 Printf 的函数并修改输出

转载 作者:行者123 更新时间:2023-11-30 17:23:58 25 4
gpt4 key购买 nike

我正在 Hook 类似 printf 的函数,其定义如下:

int Con_Printf(const char *format, ...)

我想检查给定的字符串是否在参数内或最终格式化的字符串中,如果存在,则将其替换为另一个字符串,但我有以下代码将参数传递给原始函数:

va_list args;
char *parg;

va_start(args, format);
vasprintf(&parg, format, args);
va_end(args);

(*conprint)("%s", parg);
free(parg);

是 (*conprint) 原始的 Con_Printf 函数。

如何查看应用了格式的字符串(即将参数替换为占位符)以替换我需要的内容,而不仅仅是传递所有参数?

示例:该程序调用 Con_Printf("%s %s", "foo", "bar"),我想知道在我的 Con_Printf Hook 中“bar”是否在参数内,但我不知道有多少个参数,因为Con_Printf 的“, ...)”定义。

如果在参数中找到“bar”,则将其替换为“baz”并转发修改后的调用 (*conprint)("%s %s", "foo", "baz")(用 baz 替换 bar )。 (*conprint)("foo baz") 也能做到这一点。

谢谢!

最佳答案

我想,你想要的是va_arg()。查看手册页here 。您可能需要

,而不是直接使用 vasprintf()
  1. 一次取出一个参数
  2. 执行所需的检查和操作
  3. 然后将它们放在一起进行最终conprint

从手册页来看,历史设置是:

#include <varargs.h>

void foo(va_alist)
va_dcl
{
va_list ap;

va_start(ap);
while (...) {
...
x = va_arg(ap, type);
...
}
va_end(ap);
}

您需要根据提供的格式说明符选择类型

关于c - Hook 类似 Printf 的函数并修改输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354946/

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