#默认的编译选项
cqq@kali:~/CTF$ gcc vuln.c -o vuln1
# -fno-stack-protector 禁用栈保护措施
cqq@kali:~/CTF$ gcc vuln.c -o vuln2 -fno-stack-protector
# -m32 表示在64位系统下编译32位的二进制文件,需要额外的库支持
cqq@kali:~/CTF$ gcc vuln.c -o vuln -fno-stack-protector -m32
cqq@kali:~/CTF$ shasum -a1 vuln1
ddb459cf1550383fff8a512c7038072df6ed3a79 vuln1
cqq@kali:~/CTF$ shasum -a1 vuln2
ddb459cf1550383fff8a512c7038072df6ed3a79 vuln2
cqq@kali:~/CTF$ file vuln2
vuln2: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=fe8c2e7d1b2d8b48eddb3df8b6af06a068556635, not stripped
cqq@kali:~/CTF$ file vuln
vuln: ELF 32-bit LSB pie executable Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=04acea3491a1a08e9c96b8d78847e9d31baa63fd, not stripped
发现确实加了-m32
参数的二进制就是32位的,而没加这个参数的就是默认的64位的。