C 十六进制字符转换器转换为错误字符
我正在研究缓冲区溢出攻击,我有一段代码,它将C 十六进制字符转换器转换为错误字符,c,char,hex,buffer-overflow,C,Char,Hex,Buffer Overflow,我正在研究缓冲区溢出攻击,我有一段代码,它将0xXX输入转换为等效的1字节ASCII字符 int main(int argc,char **argv) { char buffer[1024]; while (fgets(buffer,sizeof(buffer),stdin)) { char * rest=buffer; unsigned char hexVal; while (rest[0]!='\0') {
0xXX
输入转换为等效的1字节ASCII字符
int main(int argc,char **argv) {
char buffer[1024];
while (fgets(buffer,sizeof(buffer),stdin)) {
char * rest=buffer;
unsigned char hexVal;
while (rest[0]!='\0') {
if (1==sscanf(rest,"0x%2hhx",&hexVal)) {
printf("%c",hexVal);
rest+=4;
} else {
printf("%c",rest[0]);
rest++;
}
}
}
return 0;
}
当我给它输入0x180x850x040x08
(这是08048518
的小端版本)时,它会变成地址bdbfef18
。
我不知道为什么地址被错误地解释了。这里的东西怎么会变成地址?这个地址来自哪里?您应该看到打印的五个字符-代码24、138、4、8和10表示
“\n”
。这应该是它的结束-即没有地址。