0x00 前言
最近有一些调试DLL的需求
平常经常写的控制台程序、Java、Python之类的都有相应的Print函数来输出一些调试信息
但是DLL比较特殊,而我又习惯了这种通过Print来打印输出调试信息的方式(后期会逐渐过渡到Debug调试):cry:
故搜集了几种相对应的方法
0x01 PrintPrintPrint~
以下三种方案均支持不定参数格式化
关键头文件
1 |
解决报错
对于以下的几种方案,如果编译环境是VS,均会产生报错,可以通过在头部#pragma warning(disable:4996)
或者#define _CRT_SECURE_NO_WARNINGS
方案一 MessageBox
1 | int CDECL MessageBoxPrintf(TCHAR * szCaption, TCHAR * szFormat, ...) |
1 | MessageBoxPrintf((TCHAR*)("Title"), (TCHAR*)("啊哈哈哈哈哈%d %s"), int_num, str); |
方案二 文件读写
1 | void ShowDbgInfo(const char* data, ...) |
1 | ShowDbgInfo(" [+] %d %s", int_num,str); |
方案三 控制台输出
1 | int dllPrintf(char* fmt, ...) |
1 | dllPrintf(" [+] %d %s", int_num,str); |
0x02 参考
其中对于文件读写篇,本文修复了一个bug:原文fopen采用了w+参数,而实际上应该采用a+来进行追加写入
,并完善了代码:新增fclose来关闭句柄
。