ทางเลือกโอเพนซอร์สเพื่อสะท้อนแสง? [ปิด]


419

เพียงแค่จะถามว่าถ้าใครรู้ของแหล่งที่มาเปิดทางเลือกให้กับ RedGate ของสะท้อน ? ฉันสนใจที่จะตรวจสอบว่าเครื่องมือคล้ายกับตัวสะท้อนสัญญาณทำงานอย่างไร

หมายเหตุถ้าคุณรู้ว่าเป็นทางเลือกที่ฟรี แต่ไม่ใช่โอเพ่นซอร์สกับตัวสะท้อนสัญญาณคุณสามารถตอบคำถามที่เกี่ยวข้องดังต่อไปนี้:

ข้อมูลอย่างย่อ - อัปเดต 11 พฤษภาคม 2554

การสรุปโครงการและเครื่องมือแบบโอเพนซอร์สที่แนะนำ:

  1. โครงสร้างพื้นฐานคอมไพเลอร์ทั่วไป (CCI)
  2. เซซิลโมโน
  3. ILSpy
  4. dnSpy (ทางแยกของ ILSpy โครงการปรากฏใช้งานมากกว่าเดิม)
  5. โปรแกรมแก้ไข Dotnet IL (DILE)
  6. IL.View
  7. Monoflector ( ไม่ใช้งานตั้งแต่เมษายน 2554)

ทรัพยากรต่อไปนี้อาจเป็นที่สนใจ:

  • TypeView.cs
  • บันทึกของ Jason Haley เกี่ยวกับการแยกส่วน. NET
  • โพสต์บล็อกล่าสุดของ Adrian Bankสรุปทางเลือกจำนวนหนึ่งของ Reflector ซึ่งรวมถึงตัวเลือกหลายตัวที่ไม่ได้กล่าวถึงด้านล่าง
  • โพสต์บล็อกอย่างละเอียดของ Mark Lichtenberg เปรียบเทียบตัวเลือกโอเพ่นซอร์สหลายตัว (DILE, ILSpy และ Mono Cecil โดยใช้ MonoDevelop) กับ Reflector

2
FYI, ตอนนี้มี v6 รุ่นที่จะฟรีโดยไม่มีกำหนด: eon.businesswire.com/news/eon/20110426007021/en/.NET-Reflector/ …
thecoop

เป็นไปได้ที่ซ้ำกันของSomething Better than .NET Reflector หรือไม่
จ้า

2
@ มัดถ้าคุณตรวจสอบวันที่คำถามนี้ถูกถามก่อน Something Better than .NET Reflector? คำถาม. นอกจากนี้คำถามนี้เป็นการถามหาทางเลือกโอเพนซอร์สโดยเฉพาะ
MagicAndi

คำตอบ:


31

2 ตัวเลือกที่ฉันรู้

  • CCI
  • เซซิลโมโน

สิ่งเหล่านี้จะไม่ทำให้คุณ C #


Leppie ขอบคุณ ฉันยอมรับว่านี่เป็นคำตอบแม้ว่ามันจะเป็นตัวเลือกที่ยากระหว่างคำตอบของคุณกับ Jason Haley
MagicAndi

CCI ไม่มีส่วนหน้า GUI (ที่ฉันรู้) แต่ในแหล่งที่มาปัจจุบันใน codeplex มี API ที่ค่อนข้างง่ายในการแปลง AST ที่ถอดรหัสแล้วเป็น C #, fyi
justin.m.chase

2
Mono.Cecil เป็นเพียงห้องสมุดใช่ไหม
Robert Jeppesen

175

อัปเดต 13 ธันวาคม 2554

มีเครื่องมือโอเพ่นซอร์สต่อไปนี้:


1
ฉันใช้ dile เมื่อไม่กี่ปีที่ผ่านมา - มันเป็น disassembler ยอดเยี่ยมและดีบั๊กเกอร์ - ฉันขอแนะนำอย่างยิ่งเมื่อฉันใช้มัน ฉันไม่ได้ใช้มันสักครู่
Jason Haley

8
เวอร์ชันปัจจุบันของ ILSpy (ILSpy v1.0.0.440, 20010228) ทำงานเหมือนที่ฉันคาดไว้ ฉันสามารถเรียกดูวิธีการคุณสมบัติและแม้แต่ซอร์สโค้ดสำหรับ C # lib โดยไม่ต้องใช้ไฟล์ PDB
mathijsuitmegen

6
เพิ่งเริ่มใช้งาน ILSpy มีความสุขมากกับมันจนถึงตอนนี้ ทดแทนที่สมบูรณ์แบบ ขอบคุณ SharpDevelop!
codemonkey

1
เพิ่งเจอเครื่องมือนี้มีความสุขมากที่ได้เห็นการแทนที่ลวดเย็บกระดาษในแถบเครื่องมือของนักพัฒนา. NET decompilations บางอย่างแปลก ๆ เล็กน้อย (การต่อสตริงจะปรากฏขึ้นตามที่ IL เห็น แต่ไม่จำเป็นต้องเป็นรหัสที่เขียน - ไม่ใช่เรื่องเลวร้าย) แต่โดยรวมแล้วเป็นเครื่องมือที่ยอดเยี่ยม!
CodeMonkey1313

5
ฉันเพิ่งลอง ILSpy และใช้งานได้ดี! มันยังสร้างแลมบ์ดานิพจน์และตัววนซ้ำ ("คืนผลตอบแทน") ด้วยวิธี ... ว้าว! ผมประทับใจ!
Qwertie

38

ทดแทนอีกก็จะdotPeek JetBrains ประกาศว่าเป็นเครื่องมือฟรี มันอาจจะมีคุณสมบัติเพิ่มเติมเมื่อใช้กับResharperของพวกเขาแต่แม้เมื่อใช้เพียงอย่างเดียวมันก็ทำงานได้ดีมาก

ประสบการณ์ของผู้ใช้นั้นเหมือน MSVS มากกว่าแบบแยกชิ้นส่วนแบบสแตนด์อโลน ฉันชอบโค้ดที่อ่านมากกว่าในตัวสะท้อนแสง Ctrl + T การนำทางก็เหมาะกับฉันเช่นกัน เพียงแค่ซิงโครไนซ์ทรีกับบานหน้าต่างรหัสอาจดีกว่า

สรุปแล้วมันยังอยู่ในระหว่างการพัฒนา แต่ใช้งานได้ดีอยู่แล้ว


2
เครื่องมือยอดเยี่ยม แต่ไม่ใช่โอเพ่นซอร์ส อย่างไรก็ตามมันฟรีซึ่งอาจหมายถึงว่ามันขโมยสปอตไลท์จากโอเพนซอร์สที่เทียบเท่า
Drew Noakes

เฟอร์ดินานด์ -1 สำหรับเครื่องมือโอเพนซอร์ซ คุณควรลองเพิ่มคำถามนี้ลงในหนึ่งในคำถามที่เชื่อมโยงกับ Reflector
MagicAndi

3
ฉันทิ้งคำตอบไว้ที่นี่เพื่อทำให้ข้อมูลสมบูรณ์ยิ่งขึ้น หัวข้อนี้ง่ายที่สุดในการค้นหาโดย google และรายการเครื่องมืออื่น ๆ ที่นี่สมบูรณ์ที่สุด (ไม่ใช่ทั้งหมดนั้นเป็น OSS btw.)
Ferdinand Prantl

เฟอร์ดินานด์ฉันได้ลดคำตอบอย่างต่อเนื่องทั้งหมดที่ให้โซลูชันแบบปิดแหล่งข้อมูลอัปเดตข้อความคำถามซ้ำ ๆ เพื่อระบุว่าฉันสนใจ OSS เท่านั้นและทำให้แน่ใจว่าโซลูชันทั้งหมดในสรุปคำถามเป็นโอเพ่นซอร์ส มีอีกหนึ่งวิธีแก้ปัญหาที่มาปิดในกระทู้คำถามนี้ซึ่งฉันได้ลงคะแนนยัง คำถามนี้ถูกถามก่อนการตัดสินใจของ Redgate ที่จะเรียกเก็บเงินคืนก่อนหน้านี้ในปีนี้และขอเฉพาะทางเลือกโอเพนซอร์ส ฉันต้องทำอะไรอีก
MagicAndi

9
@MagicAndi หยุดบ่นจะเริ่มต้น ฉันพบกระทู้นี้จาก Google ในขณะที่มองหาทางเลือกฟรี ฉันไม่สนหรอกว่ามันจะโอเพนซอร์สหรือไม่ @ Ferdinand ขอบคุณสำหรับการเชื่อมโยง dotPeek ดูมีแนวโน้ม
Winston Smith

15

Telerik วันนี้เปิดตัวเบต้าของเครื่องมือ decompilation ของพวกเขาเองJustDecompile ปิดแหล่งที่มา แต่ฟรีและดูมีแนวโน้ม


เรย์ขอโทษ แต่เพื่อให้สอดคล้องกับแนวทางการตอบ GrayWolf ฉันจะต้องลงคะแนนคำตอบนี้ คำถามนี้เฉพาะสำหรับทางเลือกที่มาเปิด ชุมชน. NET อนุญาตให้ตัวเองยุ่งกับการพึ่งพาโซลูชั่นแบบปิด เราควรหลีกเลี่ยงสิ่งนี้ในอนาคตโดยไม่คำนึงว่าใครเป็นผู้จัดหาเครื่องมือ -1
MagicAndi

เรย์กลับกลายเป็นว่าข้อเสนอแนะของ Kaliro ของฉันนั้นเป็นประโยชน์อย่างมากเช่นกัน โปรดแบ่งปันข้อลง - ฉันสมควรได้รับ! น่าเสียดายที่คุณไม่สามารถลงคะแนนในคำตอบของคุณเองไม่ว่าจะขึ้นหรือลง
MagicAndi

1
@MagicAndi - การลบคำตอบของคุณจะง่ายกว่าการลงคะแนน หากคุณไม่รู้สึกว่ามันเพิ่มคุณค่าใด ๆ คุณก็มีพลังที่จะทำให้ "หายไป"
jpierson

1
อย่าลบ / ลงคะแนนคำตอบนี้ คำถาม SO อื่น ๆ เกี่ยวกับทางเลือกฟรีกำลังถูกปิดเป็น "ซ้ำซ้อน" ของคำถามนี้โดยผู้ดำเนินรายการ! ดังนั้นข้อมูลของการอยู่ที่นี่
อเล็กซ์

JustDecompile เป็นแอพพลิเคชั่น buggy ที่น่าอับอายตลอดเวลาและแสดงข้อยกเว้นมากมายที่ควรใช้รหัส นอกเหนือจากนั้นมันช้ามาก .NET Reflector ดีกว่าอึมาก!
Elmue


10

อันที่จริงฉันค่อนข้างมั่นใจว่า Reflector นั้นเป็นตัวแยกส่วนที่มีฟังก์ชั่นถอดรหัสเสียงบางส่วน ถอดแยกชิ้นส่วนเนื่องจากอ่านไบต์จากไฟล์ชุดประกอบและแปลงเป็นชุดภาษา (ILasm ในกรณีนี้) ฟังก์ชั่น Decompiler ที่ให้บริการโดยการแยก IL เป็นรูปแบบที่รู้จักกันดี (เช่นการแสดงออกและคำสั่ง) ซึ่งได้รับการแปลเป็นภาษาระดับที่สูงขึ้นเช่น C #, VB.Net ฯลฯ addin api สำหรับ Reflector ช่วยให้คุณเขียนนักแปลภาษาของคุณเอง คุณต้องการ ... อย่างไรก็ตามความมหัศจรรย์ของวิธีการแยกวิเคราะห์ IL ลงในต้นไม้แสดงออกเป็นความลับที่ได้รับการปกป้องอย่างใกล้ชิด

ฉันขอแนะนำให้ดูสามสิ่งที่กล่าวมาข้างต้นหากคุณต้องการทำความเข้าใจว่า IL disassemblers ทำงานอย่างไร: Dile, CCI และ Mono เป็นแหล่งข้อมูลที่ดีสำหรับสิ่งนี้

ฉันขอแนะนำให้รับ Ecma 335 spec และหนังสือของ Serge Lidin ด้วย


ลิงค์นี้ดูเหมือนจะลง
Lyra

ใช่ขอโทษที่ฉันเอาเว็บไซต์นั้นลงเมื่อปีที่แล้วและยังไม่ได้แทนที่
Jason Haley

8

เหตุผลหลักที่ฉันใช้ Reflector (และฉันคิดว่าเหตุผลหลักที่คนส่วนใหญ่ใช้) คือสำหรับ decompiler: มันสามารถแปล IL ของเมธอดกลับเป็นซอร์สโค้ดได้

นับว่าMonoflectorจะเป็นโครงการที่จะดู มันใช้เซซิลซึ่งจะทำการสะท้อนและ Cecil.Decompiler ซึ่งทำการถอดรหัส แต่ Monoflector เลเยอร์ UI ไว้ด้านบนของไลบรารีทั้งสองซึ่งควรให้แนวคิดที่ดีเกี่ยวกับการใช้ API

Monoflector ยังเป็นทางเลือกที่ดีสำหรับ Reflector ทันที ช่วยให้คุณสามารถเรียกดูประเภทและถอดรหัสวิธีซึ่งเป็น 99% ของสิ่งที่ผู้คนใช้กับ Reflector มันหยาบมากรอบ ๆ ขอบ แต่ฉันคิดว่ามันจะเปลี่ยนอย่างรวดเร็ว


5

ตัวสะท้อนแสงนั้นเป็นชุดประกอบ. NET ดังนั้นคุณจึงสามารถเปิดตัว Reflector.exe ในตัวสะท้อนแสงเพื่อตรวจสอบว่ามีการสร้างขึ้นอย่างไร


14
ไม่คุณไม่สามารถ ตัวสะท้อนแสงจะทำให้งง
Jeff Yates

14
คุณไม่สามารถเปิด Reflector ใน Reflector ได้? ฉันเพิ่งทำไป - การทำให้งงงวยเพียงทำร้ายความสามารถในการอ่านของ IL เนื่องจากตัวระบุและชื่อประเภทมีการพันกัน แต่นั่นไม่ได้หมายความว่าคุณไม่สามารถแยกแยะได้
Andrew Hare

13
Andrew - เมื่ออยู่ในหลุมหยุดขุด ...
MagicAndi

2
อืม ... ฉันมีรุ่น 5.1.6.0 และฉันสามารถดูแหล่งที่มาได้ดี - เฉพาะชื่อตัวระบุเท่านั้นที่สับสน ไม่สมบูรณ์ใช่ แต่ฉันกำลังดู C # source ของ Reflector ในตอนนี้ :)
Andrew Hare

7
@Andrew Hare: ถ้าคุณลองดูวิธีการใช้งานผ่าน reflector ใน reflector คุณจะเห็น "นี่มันงง" และมันจะไม่แสดงเลยดังนั้นคุณจะไม่สามารถใช้ reflector ได้ นอกจากนี้การพูดคุยเกี่ยวกับสิ่งที่ OP ต้องการด้วย OP คือการต่อสู้ที่แพ้
Jeff Yates

3

ฉันกำลังทำงานใน Disassembler / Decompiler โอเพนซอร์สที่เรียกว่า Assembly Analyzer มันสร้างซอร์สโค้ดสำหรับวิธีการแสดงข้อมูลเมตาแอสเซมบลีและทรัพยากรและช่วยให้คุณสามารถผ่านการอ้างอิง

โครงการโฮสต์บน CodePlex => http://asmanalyzer.codeplex.com/


1

เครื่องมือตัวสะท้อนสัญญาณใช้ตัวสะท้อนสัญญาณ   - เห็นได้ชัดว่านี่ไม่ถูกต้อง

คุณขอสองสิ่ง - รหัสที่แสดงว่าตัวสะท้อนสัญญาณทำอะไรและยังเป็นทางเลือกแทนตัวสะท้อนแสง

ต่อไปนี้เป็นตัวอย่างซึ่งง่ายกว่าสิ่งที่ Reflector ทำ แต่แสดงเทคนิคการสะท้อน: TypeView.cs

ฉันไม่มีคำแนะนำสำหรับการเปลี่ยนแผ่นสะท้อนแสงโอเพนซอร์ซ


อืมถ้าด้วย "Reflection" คุณอ้างถึง "System.Reflection" ของ. NET Framework ฉันจะสงสัยอย่างมาก
Christian.K

3
@ Christian.K: ไม่ตัวสะท้อนแสงไม่ได้ใช้System.Reflectionในกรอบงาน Roeder ระบุว่าเร็วมากเนื่องจากปัญหาเกี่ยวกับการโหลดและการโหลด
casperOne

@ casperOne ฉันไม่ทราบแน่ชัดว่า. NET Reflector ทำงานอย่างไรภายใน แต่System.Reflectionเนมสเปซได้ขยายออกไปตั้งแต่ยุคแรก ๆ ของ. NET Reflector ตอนนี้รองรับการโหลดและยกเลิกการโหลดแอสเซมบลีในบริบทที่สะท้อนเท่านั้น: stackoverflow.com/questions/225330/ …
Drew Noakes

1
@Drew Noakes: นี่เป็นความจริง แต่ Roeder ไม่เคยระบุ (ตามความรู้ของฉัน) ว่าเขาได้ย้ายกลับไปที่ Reflection เมื่อมีการเปลี่ยนแปลงนี้
casperOne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.