gpt4 book ai didi

c - 论据从右到左阅读

转载 作者:行者123 更新时间:2023-12-02 08:31:40 26 4
gpt4 key购买 nike

我正在学习缓冲区溢出的工作原理并遇到了一些我不理解的问题。

我正在尝试通过缓冲区溢出更改函数指针的地址,并将参数传递到从 Perl 脚本运行的可执行文件中。我的问题是,为什么 Perl 似乎是从右到左阅读我的地址参数?

Perl:

$arg = "AAAAAAAAAA"."\x40\x11\xc4";  //string with address to malicious test function
$cmd = "./bo_test ".$arg;
system($cmd);

输入的地址就是这个函数打印出来的准确地址。但是,为了通过溢出调用测试函数,我需要输入“\xc4\x11\x40”。

如果我直接指向 C 中的地址,它会接受我期望的输入:

//call function based on address pointer_fn
desired_fn = ( void (*)())0x4011c4; //when run desired_fn runs the malicious test method

有人可以解释为什么 Perl 会这样做(或者我做错了什么导致它)吗?

如果有帮助,我正在使用 strcopy() 复制参数并在我的 exe 中启动溢出。

最佳答案

假设你有一个字符串:

char* s = "\x40\x11\xc4";

如果您有一个大小为 3 字节的整数类型,并且您希望将字符串的内容视为 3 字节整数,您可以使用:

the_int_type* p = (the_int_type*)s;

在小端系统中,*p 的值将是:

0x40 + (0x11 >> 8) + (0xc4 >> 16)

在大端系统中,这将是:

(0x40 >> 16) + (0x11 >> 8) + 0xc4

从您所描述的行为来看,您有一个小端系统。

关于c - 论据从右到左阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091236/

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