【发布时间】:2020-06-01 14:15:16
【问题描述】:
我正在学习逆向工程。我试图将代码编译到汇编器视图以便更好地理解。如何禁用汇编代码中的任何其他(冗余)信息?我只想留下纯汇编代码
当前命令(windows)gcc -S .\test.c -masm=intel -O0
输出:
.file "test.c"
.intel_syntax noprefix
.text
.def __main; .scl 2; .type 32; .endef
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
push rbp
.seh_pushreg rbp
mov rbp, rsp
.seh_setframe rbp, 0
sub rsp, 32
.seh_stackalloc 32
.seh_endprologue
call __main
nop
add rsp, 32
pop rbp
ret
.seh_endproc
.ident "GCC: (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0"
此输出产生冗余信息。例如,我可以删除.file "test.c",它不会影响任何东西。
来源:
void main() {
}
【问题讨论】:
-
如果您只需要组装,那么与任何 反汇编器 提供给您的有什么区别?特别是,如果您使用调试符号进行编译。所有这些冗余信息都是你在编译时丢失的高级细节,如果你让 GCC 生成一个汇编文件来简化你的逆向工程,你为什么要删除它们?
-
目前只问编译,不反汇编
-
我不明白,但你可以通过简单地丢弃以点开头的行来获得很长的路要走。
标签: assembly mingw reverse-engineering mingw-w64