Tôi thấy những gì tôi nghĩ là hành vi lạ từ các tệp đối tượng đầu ra bởi các công cụ Microsoft Visual Studio 2003. Tiện ích file
nói với tôi:Tháo rời Microsoft Visual Studio 2003 đầu ra trình biên dịch
asmfile.obj: 80386 COFF executable not stripped - version 30821
Đối với đối tượng được tạo ra bởi các nhà lắp ráp, nhưng đối với đối tượng đến từ các tập tin C, tôi nhận được chỉ là:
cfile.obj: data
Sử dụng dumpbin
tiện ích của Microsoft và objdump
tôi nhận được từ Cygwin , Tôi có thể tháo rời tập tin được xây dựng lắp ráp, nhưng tôi không nhận được kết quả hữu ích nào từ một trong hai tiện ích cho các tệp C-built.
Tôi có một vài câu hỏi liên quan đến sự khác biệt này:
- gì là định dạng tập tin đối tượng được tạo ra bởi trình biên dịch MSVC2003?
- Làm cách nào để có thể tháo rời tệp đối tượng đó?
Tôi đặc biệt quan tâm đến việc tháo gỡ trong cú pháp AT & T - Tôi đang làm cổng của cơ sở nguồn lớn để làm việc với GCC và tôi muốn sử dụng phương pháp này làm lối tắt cho một số thói quen lắp ráp nội tuyến trong dự án.
Chỉnh sửa: Thêm một số thông tin khác.
Khi tôi chạy dumpbin
trên một trong những tập tin này mang lại cho tôi không có kết quả:
C:\> dumpbin /disasm Func.obj
Microsoft (R) COFF/PE Dumper Version 7.10.6030
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file Func.obj
FileType: ANONYMOUS OBJECT
Với objdump
, nó mang lại:
$ objdump -d Func.obj
objdump: Func.obj: File truncated
Mở các tập tin được xây dựng từ lắp ráp, tôi nhận được kết quả hợp lý.
Chỉnh sửa lại: Thêm thông tin dòng lệnh.
Các tập tin lắp ráp được xây dựng với một dòng lệnh tương tự như sau:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
ml
khi thực hiện bởi chính nó nói:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Các tập tin C được xây dựng với lệnh sau:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
Có một sốCác tùy chọnvà -D
được chuyển đến ml
và đến cl
, nhưng tôi đã bỏ qua các tùy chọn này ngắn gọn tại đây. Các tùy chọn cl
được mô tả here.
@Michael: bạn nói đúng - mặc dù mã thực tế được tạo có thể thay đổi, các công cụ như dumpbin không thay đổi đáng kể (các phiên bản cũ không xử lý tất cả các tập lệnh mới nhất, nhưng đó là về nó). –
Tôi sẽ chỉnh sửa để thêm một số chi tiết khác. Nguồn C có thể là * bất cứ điều gì * theo như tôi có thể nói - mọi đầu ra đối tượng trong toàn bộ dự án này có cùng một hành vi. –
'File' cho bạn biết loại tệp đối tượng đó là gì? –