讨论栈地址高低位分析

讨论栈地址高低位分析:
遇到一道栈溢出的题,发现对入栈地址高低位储存还是不清晰,打算研究一下,
常见架构如 x86 和 x86-64 默认使用小端字节序。
以下基于x86 32位程序
写一个函数,将字符,数字入栈
`void __stdcall aa(char *s,int a)
{
char s1[32];
int b=0x45678912;
strcpy(s1,s);
printf("%d\n",&b);
printf("%d\n%d",&s1,&s1[1]);

}
int main()
{
int b=123456789123456789;
char* sa="aaa1234567890123456789aaa";
aa(sa,b);

}`



printf("%d\n",&b);
printf("%d\n%d",&s1,&s1[1]);

61是a,31是1的ascill码
说明右边是低地址左边是高地址;

对于int b=0x45678912;为小端存储。。。

回忆一下小端储存

注:0x01 00 00 04

观察栈中地址储存,发现
地址和数字一样。是小端。

但对与字符串是大端。。

所以在栈溢出时

Eip覆盖的字符串为ddee,转ascill码64与65,在栈里存储是65656464;所以地址是65656464而不是64646565.即eedd而不是ddee

posted @ 2024-12-11 21:22  ltlreanweb  阅读(17)  评论(0)    收藏  举报