小编use*_*356的帖子

我不明白 strcmp 的编译器优化,针对常量字符串

为了提高我的二进制开发技能,并加深我在低级环境中的理解,我尝试解决 中的挑战pwnable.kr,第一个挑战-称为fd具有以下 C 代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
        if(argc<2){
                printf("pass argv[1] a number\n");
                return 0;
        }
        int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN\n", buf)){
                printf("good job :)\n");
                system("/bin/cat flag");
                exit(0);
        }
        printf("learn about Linux file IO\n");
        return 0;

}
Run Code Online (Sandbox Code Playgroud)

objdump -S -g ./fd为了反汇编它而使用它,我感到困惑,因为不是调用 strcmp 函数。它只是比较字符串而不调用它。这是我正在谈论的汇编代码:

 80484c6:   e8 05 ff ff ff          call …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly gcc strcmp

1
推荐指数
1
解决办法
324
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

strcmp ×1

x86 ×1