关于常量的问题
看我一个能通过编译的代码#include <stdio.h>
int main()
{
99;
"Abc";
printf("OK\n");
}
这里的代码虽然能通过编译,可是因为那两个数值没有被用到是不是会被编译器给优化掉呢,最终exe代码中是不会有这两个数值的是吗 PYTHON也可以耶
1
2
3
4
5
"aa"
"bbb"
print("ok") .file "x.c"
.text
.section .text$_Z6printfPKcz,"x"
.linkonce discard
.globl __Z6printfPKcz
.def __Z6printfPKcz; .scl 2; .type 32; .endef
__Z6printfPKcz:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $36, %esp
leal 12(%ebp), %eax
movl %eax, -16(%ebp)
movl -16(%ebp), %ebx
movl $1, (%esp)
movl __imp____acrt_iob_func, %eax
call *%eax
movl %ebx, 8(%esp)
movl 8(%ebp), %edx
movl %edx, 4(%esp)
movl %eax, (%esp)
call ___mingw_vfprintf
movl %eax, -12(%ebp)
movl -12(%ebp), %eax
movl -4(%ebp), %ebx
leave
ret
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "OK\12\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
call ___main
movl $LC0, (%esp)
call __Z6printfPKcz
movl $0, %eax
leave
ret
.ident "GCC: (GNU) 12.1.0"
.def ___mingw_vfprintf; .scl 2; .type 32; .endef
这是对应的汇编代码,你自己能从中找到这两个常量吗? jackz007 发表于 2022-5-25 16:04
这是对应的汇编代码,你自己能从中找到这两个常量吗?
你这一堆反汇编代码是咋抓下来的 wp231957 发表于 2022-5-25 16:06
你这一堆反汇编代码是咋抓下来的
使用 GNU 的 C ++ 编译器,用下面的这条命令得到汇编代码
gcc -S x.c
页:
[1]