IDA打开,查看func()函数,得到以下代码
点击查看代码
unsigned __int64 func()
{
size_t input1[6]; // [rsp+Ch] [rbp-84h] BYREF
char nptr[72]; // [rsp+40h] [rbp-50h] BYREF
unsigned __int64 v3; // [rsp+88h] [rbp-8h]
v3 = __readfsqword(0x28u);
printf("pls input the length you want to readin: ");
__isoc99_scanf("%d", input1);
if ( SLODWORD(input1[0]) > 48 )
exit(0);
printf("pls input want you want to say: ");
read(0, (char *)input1 + 4, LODWORD(input1[0]));
if ( atoi(nptr) <= 114514 )
{
puts("bad ,your wallet is empty");
}
else
{
puts("oh you have the money to get flag");
getflag();
}
return v3 - __readfsqword(0x28u);
}
第一次见到LODWORD和SLODWORD和atoi这几个函数,故学习一下作用,ChatGPT给出的解释是:
- LOWORD
LOWORD 是一个宏,帮助你从一个较大的数字中提取出最低的 16 位(就是最后两字节)。比如说,如果你有一个数字 0x12345678,用 LOWORD 提取出来的就是 0x5678。
2. SLOWORD
SLOWORD 通常是类似于 LOWORD 的一个自定义宏,用于提取低 16 位,具体功能可能和 LOWORD 相同。
3. atoi
atoi 是一个函数,用于把字符串转换成整数。例如,如果你有字符串 "42",使用 atoi 就可以得到数字 42。如果字符串不是一个有效的数字,atoi 会返回 0。
标签:__,input1,WriteUp,rbp,CTF,atoi,pwn,rsp,LOWORD From: https://www.cnblogs.com/vstral/p/18441918