[英]Format string for printf hacking
这是一个有用(非恶意)目的的黑客攻击,我不确定我想做什么,但我想尝试。 我正在运行闭源软件,因此我无法修改原始函数调用。 电话是:
sprintf(string, this->LabelFormat, value)
而this->LabelFormat
默认为%-#6.3g
。 目的是格式化双打图例的标签,因此value
是一个数字。
我可以将this->LabelFormat
设置为我想要的任何东西。 我想执行从数字到字符串的映射,例如:
value | string
--------------
0.0 | None
1.0 | I
2.0 | J
3.0 | K
等等。 是否可以操纵格式字符串为我执行指定的映射,因为我无法修改原始代码?
API挂钩包括拦截程序中的函数调用并将其重定向到另一个函数。 通过执行此操作,可以修改参数,如果您选择在确实应该成功时返回错误代码,则可以欺骗原始程序,依此类推。 所有这一切都是在调用实函数之前完成的,最后,在修改/存储/扩展原始函数/参数之后,控制权被交还给原始函数,直到再次调用它为止。
您必须使用sprintf拦截对函数的原始调用 ,并在将控制权移交给函数之前用所需的值覆盖this->LabelFormat
。
有关详细信息,请访问Detours - Microsoft Research
我认为仅使用格式字符串是不可能的。 你应该在某处添加额外的机器指令。 例如,您可以用自己的sprintf
函数替换sprintf
函数。
如果在设置LabelFormat
之前可以访问value
,那么您LabelFormat
设置为您想要显示的字符串(根本不包含任何%
代码)。 然后该函数将忽略额外的参数,但它将打印出您想要的内容。 如果您还没有访问value
那么我看不到任何方法只使用格式代码进行映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.