我正在尝试堆叠粉碎程序,以便直接跳转到返回,绕过正确密码(schoolwork)的需要。如果密码[8]在它的缓冲区上获得40,它将绕过我的想法。我是用32位做的。
以下是代码:
#include <stdio.h>
#include <string.h>
int PasswordOkay() {
char GoodPassword='F';
char Password[8];
gets(Password);
if (!strcmp(Password , "SPOCKSUX"))
GoodPassword = 'T';
return(GoodPassword == 'T');
}
int main(){
puts ( " Enter Password : ");
if(PasswordOkay())
puts(" Hello , Dr . Bones . ");
else
puts(" Access denied . ");
}
这里我有来自objdump的相关内容(我认为):
80484e8: call 8048380 <gets@plt>
80484ed: movl $0x80485f0,0x4(%esp)
和最后一行:
804851c: je 8048523 <PasswordOkay+0x56>
804851e: call 8048390 <__stack_chk_fail@plt>
8048523: leave
8048524: ret
对我如何计算(以及哪个位置)有帮助的一些帮助!