2010-04-25 50 views
18

Có cách nào dễ dàng (như một chương trình miễn phí) có thể chuyển đổi mã c/C++ thành x86? Tôi biết rằng bất kỳ trình biên dịch c nào cũng tương tự như vậy và tôi có thể biên dịch mã c và sau đó tháo rời tệp thực thi tuân thủ, nhưng đó là loại quá mức cần thiết, tất cả những gì tôi muốn là chuyển đổi một vài dòng mã.Cách dễ dàng để chuyển đổi mã c thành x86?

Có ai biết một số chương trình có thể làm điều đó không?

EDIT: Tôi biết rằng trình biên dịch GCC làm điều đó nhưng đó là AT & T cú pháp và tôi đang tìm cú pháp Intel (không chắc chắn nếu nó được gọi là cú pháp intel hay không). Cú pháp AT & T trông hơi giống với vô nghĩa đối với tôi và một số lệnh sử dụng toán hạng theo thứ tự ngược lại và không phải cách tôi sử dụng và nó có thể gây nhầm lẫn.

+8

Trình biên dịch không chính xác điều đó. Trình biên dịch của bạn sẽ đi kèm với một tùy chọn để hiển thị cho bạn đầu ra của bộ kết hợp. Có lẽ bạn có thể xem xét đọc hướng dẫn sử dụng của nó? Tôi biết đây là ngày cuối tuần, nhưng thực sự .... –

+0

Cuối tuần dài hơn nơi tôi :-) –

Trả lời

11

Gcc có thể thực hiện điều đó bằng nút chuyển đổi -S, nhưng nó sẽ rất xấu xí ở cú pháp & t.

+17

Nhưng bạn có thể thêm công tắc '-masm = intel' –

+1

Sử dụng' clang -S -mllvm --x86-asm- syntax = intel' trên Mac OS X –

13

gcc sẽ tạo hội đồng nếu bạn vượt qua tùy chọn -S trên dòng lệnh.

Microsoft Visual C++ sẽ thực hiện tương tự với tùy chọn /FAs.

+0

có phải ms visual C++ cũng sử dụng cú pháp at & t hay cú pháp của Intel không? – Bob

+2

@Bob: VC++ phát ra cụm từ cú pháp Intel tuyệt đẹp. –

+1

@Bob: Bạn cũng có thể nhận được gcc để tạo lắp ráp cú pháp Intel: http://stackoverflow.com/questions/199966/how-do-you-use-gcc-to-generate-assembly-code-in- cú pháp intel –

3

Trình biên dịch của bạn đã hoạt động như bạn đã nói và rất có thể sẽ có tùy chọn dừng trước khi lắp ráp.

Đối với GCC, hãy thêm cờ -S.

gcc -S x.c 
cat x.s 

Edit: Nếu chương trình của bạn là khá ngắn, bạn có thể sử dụng dịch vụ trực tuyến tại https://gcc.godbolt.org/.

7

Trình biên dịch lcc là trình biên dịch chéo nhiều nền tảng. Bạn có thể lấy nó để sản xuất mã Intel lắp ráp cú pháp bởi

lcc -S -Wf-target=x86/win32 foo.c 

Tôi tìm mã lắp ráp từ lcc dễ dàng hơn đáng kể để đọc hơn những gì gcc spits ra nowawadays.

0

Vì nhiều người chỉ ra hầu hết các trình biên dịch sẽ làm điều đó. Nếu bạn không thích cú pháp, một chút công việc với awk hoặc sed sẽ có thể dịch. Hoặc tôi sẽ ngạc nhiên nếu không có một chương trình nào đã làm điều đó một chút cho bạn đã viết ở đâu đó.

42

GCC có thể xuất Intel cú pháp lắp ráp bằng cách sử dụng dòng lệnh sau:

gcc -S input.c -o output.asm -masm=intel 
0

Trong VC++ lệnh sau đây có thể được sử dụng để liệt kê các mã lắp ráp.

cl/FAs a.c

0

thông báo mỗi kiến ​​trúc có tên độc đáo riêng của mình và thậm chí xây dựng khác nhau bây giờ khi bạn biết ngăn xếp tham gia sử dụng asmdễ bay hơi sẽ b giải pháp hoàn hảo

Các vấn đề liên quan