C++逆向 可变参数Hook

本文介绍了C++逆向分析中的可变参数Hook,通过讲解可变参数的基本概念、逆向分析原理,以及printf函数的Hook实战,帮助读者理解如何在不确定参数个数的情况下进行Hook操作。在实践中,作者通过汇编代码分析,揭示了如何根据最后一个固定参数计算可变参数地址,从而实现遍历和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++逆向 可变参数Hook

0x00 前言:

我们在做逆向分析的时候,经常会需要去Hook一个程序的日志输出函数。

而这种日志输出函数一般参数都不确定,这就会引起一个问题。我们如何知道参数个数?如何知道他有哪些参数呢?

0x01 C++可变参数:

可变参数简介

在C++中,可变参数的函数定义可以写成如下格式。用...来声明可变参数。

void test(int a,int b,...)
{
    //Code...
} 

在调用可变参数的函数时,可以在后面不断添加参数,例如。

test(1,2,3,4,5,"hello","test",6); 

可变参数代码实战

那么回归正题,test函数里如何知道它传进来的后面所有参数个数呢?

这就需要用到stdarg.h头文件中的几个关键字了va_listva_startva_end

#include <stdio.h>
#include <stdarg.h>
void test(int a,int b,...)
{
	va_list      arg_ptr;//定义可变参数指针
	va_start(arg_ptr,b); //b为最后一个固定参数
    printf("Address = %p",arg_ptr);//将arg_ptr的地址进行输出。
	va_end(arg_ptr);     //清空可变参数指针
}
int main(int argc,char *argv[])
{
    test(1,2,3,4,5,"hello","test,6");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值