อืม
| สถานะ: | อยู่ระหว่างการพัฒนา |
| เวอร์ชัน: | 2.9 (pre-3.0) |
| หมอ: | http://amoco.readthedocs.io/en/latest/index.html |
คำอธิบาย
Amoco เป็นแพ็คเกจ Python ที่อุทิศให้กับการวิเคราะห์เชิงสัญลักษณ์ของไบนารี
มันมีคุณสมบัติ:
- เฟรมเวิร์กทั่วไปสำหรับการถอดรหัสคำแนะนำที่พัฒนาขึ้นเพื่อลดเวลาที่จำเป็นในการใช้การสนับสนุนสำหรับสถาปัตยกรรมใหม่ ตัวอย่างเช่นตัวถอดรหัสสำหรับคำแนะนำ IA32 ส่วนใหญ่ (วัตถุประสงค์ทั่วไป) เหมาะกับ Python น้อยกว่า 800 บรรทัด ตัวถอดรหัส SPARCV8 RISC เต็มรูปแบบ (หรือชุด Thumb-1 ARM นั้นพอดีกับน้อยกว่า 350 บรรทัด ตัวถอดรหัสชุดคำสั่ง ARMV8 น้อยกว่า 650 บรรทัด
- โมดูลพีชคณิต สัญลักษณ์ ซึ่งช่วยให้สามารถอธิบายความหมายของคำแนะนำทุกคำแนะนำและคำนวณการเป็นตัวแทนการทำงานของบล็อกคำสั่ง
- รูปแบบการดำเนินการทั่วไปที่ให้แบบจำลองหน่วยความจำที่เป็นนามธรรมเพื่อจัดการกับค่าคอนกรีตหรือค่าสัญลักษณ์อย่างโปร่งใสและคุณสมบัติขึ้นอยู่กับระบบอื่น ๆ
- ชั้นเรียนต่าง ๆ ที่ใช้เทคนิคการถอดประกอบตามปกติเช่นการกวาดแบบเชิงเส้น, การสำรวจแบบเรียกซ้ำหรือเทคนิคที่ละเอียดมากขึ้นเช่นเส้นทางที่ต้องพึ่งพาซึ่งต้องอาศัยตัวแก้ปัญหา SAT/SMT เพื่อดำเนินการค้นหากราฟการควบคุมการไหลหรือแม้กระทั่งใช้เทคนิคเช่น Dare Dare
- ผู้ช่วย ทั่วไปและเครื่องพิมพ์สวย ๆ ที่ขึ้นอยู่กับซุ้มประตูเพื่ออนุญาตการกำหนดค่ารูปลักษณ์และความรู้สึกที่กำหนดเอง (คิดว่า AT&T เทียบกับ Intel Syntax, Absolute vs. Offsets, ทศนิยมหรือ hex ทันที ฯลฯ )
Amoco ยังคง ทำงานอยู่ ดูสิ่งที่ต้องทำสำหรับรายการคุณสมบัติที่จะรวมจากการพัฒนาสาขาหรือเพื่อนำไปใช้อย่างละเอียดมากขึ้น
เอกสารผู้ใช้และ API สามารถดูได้ที่ http://amoco.readthedocs.io/en/latest/index.html

สิ่งที่ต้องทำ
ส่วนประกอบบางอย่างของ Amoco ยังคงอยู่ในขั้นตอนของการถูกผลักไปยังสาขาที่วางจำหน่ายหรือพัฒนาต่อไป แม่นยำยิ่งขึ้น:
- X86 คำแนะนำ FPU ความหมายไม่ได้ใช้งาน
- ARM SIMD, VFP, นีออน, TrustZone, ชุดคำสั่ง Jazelle ไม่ได้ใช้งาน
- กลยุทธ์การแยกชิ้นส่วนที่ใช้สารแก้ปัญหาบางอย่างยังไม่ได้รวมเข้าด้วยกัน
- คุณสมบัติการนำเข้า/ส่งออกของ IDB ไม่ได้ใช้งาน
ยินดีต้อนรับการมีส่วนร่วมในการเติมเต็มชิ้นส่วนที่ไม่สมบูรณ์/ไม่ได้ใช้งาน
หมายเหตุนักพัฒนา
qt stylesheet เริ่มต้นได้รับแรงบันดาลใจจาก qdarkstylesheet ที่ยอดเยี่ยมและใช้ไอคอนส่วนใหญ่ผ่าน QResource API ที่จัดทำขึ้นจากโมดูล RC_ICONS.PY ที่สร้างขึ้น:
<pyenv>/lib/python3. <x>/site -packages/pyside6/rcc -g ไอคอน Python.qrc> rc_icons.py
ใบอนุญาต
โปรดดูใบอนุญาต
การเปลี่ยนแปลง
- v2.9.11
- เปลี่ยน Engine คำศัพท์ UI เริ่มต้นจาก pygments เป็น Rich
- เพิ่มวัตถุ emudata orm เพื่อบันทึกสถานะ emulator
- เพิ่มคำสั่งบันทึก/กู้คืนใน emul ui
- ใช้ Callstack Logic
- เพิ่ม Frame Callstack ใน Emul UI
- เพิ่มคำสั่ง debug ใน emul ui
- เพิ่มคลาส structview สำหรับ structs การพิมพ์สวย
- Fix X86 MMU_CACHE LOGIC (Flush & Misses)
- เปลี่ยนการดำเนินการเริ่มต้นจาก codeql เป็น ruff
- รหัส refactor ตามการตรวจสอบรัฟฟ์
- v2.9.10
- x86: เพิ่มการสนับสนุนสำหรับการดำเนินการโหมดจริง
- x86: เพิ่มการสนับสนุนอย่างเต็มที่สำหรับการแบ่งส่วน/การเพจ
- เพิ่มระบบ Baremetal-X86 สำหรับการวิเคราะห์เฟิร์มแวร์ BIOS
- ผสานโมดูล arch.io ใหม่เพื่อกำหนดต้นขั้ว iOS
- ผสานโมดูล cas.blobs
- เพิ่ม Rep Stos/LODS/SCAS/MOV รุ่นที่รวดเร็ว
- เพิ่มวิธี tracepoint ในคลาส EMUL
- เพิ่มการสนับสนุนสำหรับทรัพยากร PE
- ปรับปรุงคำสั่งโหลดแอพ AMOCO/EMUL
- เพิ่ม Set, Display, Nexti จนใน Emul UI
- v2.9.9
- เพิ่มสถาปัตยกรรม PPC32 (E200)
- เพิ่มการสนับสนุนสำหรับรูปแบบการปฏิบัติการของ Coff
- เพิ่มตัวแยกวิเคราะห์สำหรับไฟล์การติดตาม GDB
- ปรับปรุงแพ็คเกจ subpackage
- v2.9.8
- อัปเดตเป็น pyside6 (qt6)
- เพิ่มรูปแบบ OLE2
- อัปเดต subpackage structs เพื่ออนุญาตขนาดตัวชี้ที่เลือก
- การอัปเดตสถาปัตยกรรม AVR บางส่วน
- v2.9.7
- Drop Python <3.8 สนับสนุน
- ปรับปรุงแพ็คเกจ Structs สำหรับการสนับสนุน Bitfield และการคำนวณออฟเซ็ตของฟิลด์สำหรับขนาดตัวชี้ที่เลือก (32 หรือ 64 บิต)
- v2.9.6
- รวม Qt Gui ImageView
- ปรับปรุง qt gui binfmtview/hexview ด้วย Entropy & InfoView
- เพิ่มมุมมอง mach-o เฉพาะ
- ปรับปรุงการสนับสนุนสำหรับ QT UI Dark Mode
- เพิ่มสถาปัตยกรรม Tricore
- เพิ่มสถาปัตยกรรม W65C02
- เพิ่มสถาปัตยกรรม WASM
- เพิ่มตัวแยกวิเคราะห์รูปแบบไบนารี WASM
- ย้าย System.Tructs โมดูลไปยังแพ็คเกจ
- v2.9.5
- รวม Qt Gui Binfmtview/hexview
- แก้ไขตัวถอดรหัสและความหมายของคำแนะนำ ARM ที่หลากหลาย
- เพิ่มมุมมองโครงสร้างและมุมมอง ELF และ PE เฉพาะ
- เพิ่มการสนับสนุนสำหรับ QT UI Dark Mode
- เพิ่ม MIPS Loaders
- เพิ่มการสนับสนุน bitfield ใน structs
- v2.9.4
- เพิ่ม linux32 loaders สำหรับ mips_le/sparc/riscv
- อัปเดตอินเทอร์เฟซระบบ Win32/Win64
- เพิ่มการสนับสนุน Mapper สำหรับไปป์ไลน์ที่ไม่ขัด
- แก้ไขเอฟเฟกต์การโหลด/การจัดเก็บของ MIPS R3000
- เพิ่มคลาส archview
- เพิ่มสถาปัตยกรรม RISCV64 (riscv.rv64i)
- เพิ่มการทดสอบ precondition สำหรับรายละเอียด
- อัปเดตข้อมูลจำเพาะส่วนโค้ง ทั้งหมด เพื่อหลีกเลี่ยงการชนกัน
- ปรับปรุง/แก้ไขรูปแบบส่วนโค้งต่างๆ
- แก้ไขตัวแยกวิเคราะห์ x86
- v2.9.3
- MERGE/UPDATE DBGUI EMUL และ SRV คำสั่ง
- มุมมองผสาน/อัปเดต Emulator
- เพิ่มระบบ PSX
- เพิ่มสถาปัตยกรรม MIPS (R3000 เท่านั้น)
- ปรับปรุงการสนับสนุนสำหรับการเปลี่ยนแปลงในการกำหนดค่า
- อินเตอร์เฟสการทำซ้ำ Ext/Stub Interface
- การแก้ไขรูปแบบ sparc
- การแก้ไขการแยกวิเคราะห์ PE32+ Datadirectories
- v2.9.2
- เตรียมผสานกับ dbgui
- Drop Python 2.7 การสนับสนุน
- นำเข้าแพ็คเกจ/โมดูลใหม่และการบันทึก
- การฆ่าเชื้อรหัสต่างๆ
- แหล่งที่มืดมิด
- v2.9.1
- เพิ่ม mach-o loader และ system.osx skeleton
- ปรับปรุงโมดูล Emulator
- เพิ่มเซิร์ฟเวอร์และไคลเอนต์พื้นฐาน cmdcli ui
- แก้ไขข้อผิดพลาด/คำเตือนต่างๆ
- v2.9.0
- เพิ่มโครงกระดูกของโมดูล Emulator (Emul Class)
- จัดระเบียบโมดูลระบบใหม่ลงในแพ็คเกจย่อย
- เพิ่มระบบ, ระบบปฏิบัติการ, งานและชั้นเรียน definestub
- เพิ่มสถาปัตยกรรม AVR
- Modified Block class => แอตทริบิวต์แผนที่ย้ายไปที่คลาส cfg.node
- ย้ายคลาสหน่วยความจำใน System.Memory Module
- ย้ายคลาสการวิเคราะห์ CFG ในแพ็คเกจ 'SA'
- ปรับปรุงบันทึกการดีบัก
- ปรับปรุงตัวแยกวิเคราะห์ PE/ELF ด้วยโมดูล amoco.structs
- เพิ่มวิธีการตรวจสอบในคลาส ELF
- แก้ไขความหมายและรูปแบบ ARMV7
- v2.6.3
- เพิ่มสถาปัตยกรรมแคระ
- อัปเดตและปรับปรุงตัวโหลดเอลฟ์
- ปรับปรุงการแสดงออกที่ง่ายขึ้นสำหรับการเปลี่ยนแปลง+และ ops
- ผสานฟิลด์โครงสร้างความยาวตัวแปรคลาส "varfield"
- v2.6.2
- แก้ไขการสนับสนุนสำหรับ structs "slop"
- อนุญาตให้มีการจัดตำแหน่งโครงสร้างที่กำหนดด้วยตนเอง
- v2.6.1
- ใช้ขนาดโครงสร้างดั้งเดิม/การอพยพโดยค่าเริ่มต้น
- v2.6.0
- เพิ่มสถาปัตยกรรม V850 (E2S)
- เพิ่มสถาปัตยกรรม SH2-A
- เพิ่มการสนับสนุนสำหรับการวิเคราะห์โครงสร้าง HAB I.MX6
- ผสานสถาปัตยกรรม AVR
- เพิ่มคลาสระบบ/โครงสร้าง
- ส่งออก 'รวบรวมข้อมูล' ออกจากต้นไม้ Amoco (Libclang C-to-structs)
- เพิ่มคำแนะนำ EBPF ความหมาย
- เพิ่มการสนับสนุนสำหรับรายละเอียดคำแนะนำ BPF (เก่า)
- เพิ่มการสนับสนุนสำหรับรูปแบบไบนารี HEX/SREC
- เพิ่มวิธีการ MemoryMap 'Merge'
- เพิ่มวิธี 'step_instruction' ใน coreeexec (emulator)
- เพิ่มการสนับสนุนสำหรับโครงสร้าง UFS
- การผสานสัญญาณ Dispatcher สำหรับ UI
- ปรับปรุงการสนับสนุน setuptools
- ลบสารพิษและพึ่งพาเทรวิสเท่านั้น
- ปรับปรุงคำแนะนำ ARMV7 ความหมายและผู้ช่วยรหัส
- ปรับปรุงรายละเอียดและรูปแบบคำแนะนำ ARMV7
- เพิ่มการบันทึกระดับการดีบักต้นไม้ข้อมูลจำเพาะ
- แก้ไขตัวถอดรหัสสำหรับส่วนโค้งด้วยคำสั่งความยาวตัวแปร Bigendian
- ปรับปรุงประสิทธิภาพของตัวถอดรหัสด้วยตัวบ่งชี้การดึงข้อมูลเพิ่มเติม
- เพิ่มการสนับสนุน pygments สำหรับ SPARC, MSP430 Formatter การเรียนการสอน
- ปรับปรุงนิพจน์ให้กว้างขึ้น
- ปรับปรุงโมดูลการกำหนดค่า
- v2.5.3
- แก้ไขปัญหาให้เสร็จสิ้น #77 (โดยทั่วไป X64 Madness)
- v2.5.2
- การแก้ไขบางส่วนของปัญหา #77 (GitHub) ที่เกี่ยวข้องกับความหมายของคำสั่ง Lea บน X64 Arch
- v2.5.1
- เพิ่มสถาปัตยกรรม RISC-V
- เพิ่มสถาปัตยกรรม EBPF
- ใช้ unicode outputs ที่มีสัญลักษณ์ Unicode สำหรับตัวดำเนินการส่วนใหญ่หากรองรับ
- เพิ่มน้อยกว่าที่ไม่ได้รับการออกแบบ (LTU) และผู้ประกอบการที่มากกว่าหรือไม่เท่าเทียมกัน (GEU) ที่ต้องการโดยสถาปัตยกรรม RISCV ที่จำเป็น
- แก้ไขวิธีการง่าย ๆ สำหรับการแสดงออกของคอมพ์
- ปรับปรุงวิธีการง่าย ๆ ด้วยพารามิเตอร์เสริม 'บิตเลซ'
- ปรับปรุงอินเทอร์เฟซหน่วยความจำ Mapper
- แก้ไขวิธี SMT model_to_mapper
- เพิ่มรูปแบบ CFG 'DOT' เอาต์พุต (ประถมศึกษา)
- เพิ่มวิธี 'getFileOffset' ในคลาส ELF และ PE
- ลบธง Endianness ทั่วโลก
- อัปเดตรูปแบบ x86/x64 ที่จะเข้ากันได้กับ GNU AS และ Clang
- เพิ่มคำแนะนำ x86/x64 บางส่วนความหมาย (movnti, wbinvd, div, ... )
- แก้ไขข้อมูลจำเพาะที่หายาก x86/x64 บางส่วน (PMOVMSKB, ... )
- v2.5.0
- สนับสนุน Python3 (> = 3.5)
- อนุญาตให้โหลดซุ้มโค้ง CPU หลายตัว (แก้ไขปัญหา #21 และ #64)
- อัปเดตเอกสาร readme และ sphinx
- v2.4.6
- เพิ่มเอกสารประกอบ SPHINX (ไฟล์ RST และ DOCSTRINGS)
- เพิ่มวิธีการฟังก์ชั่นสำหรับคลาสหลัก
- ปรับปรุงการพิมพ์เอลฟ์สวย
- เปลี่ยนโมดูล db เพื่อใช้ sqlalchemy มากกว่า zodb
- ทำให้วัตถุทั้งหมดเลือกได้ (ด้วยโปรโตคอลสูงสุด)
- เพิ่ม Formatters X86 & X64 ใหม่
- แก้ไขข้อมูลจำเพาะและความหมาย x64 จำนวนมาก
- การปรับปรุงประสิทธิภาพบางอย่าง
- ปรับปรุง MEM (VEC) และ SLC (VEC) ง่ายขึ้น
- แก้ไข SLC.Simplify สำหรับตัวดำเนินการ '**'
- v2.4.5
- เพิ่มตัวเลือกโหมด X86/X64 Internals '
- เพิ่มนิพจน์ 'Lab' สำหรับป้ายกำกับ
- ปรับปรุงหน่วยความจำ/แผนที่ด้วยวิธี 'grep'
- ปรับปรุง MemoryZone เพื่ออนุญาตให้ "เปลี่ยน" ไปยังที่อยู่บางอย่าง
- ปรับปรุง X86 AT&T Formatter
- เพิ่มการทดสอบตัวถอดรหัส x64
- แก้ไขโหมดที่อยู่ที่เกี่ยวข้องกับ RIP Relative
- แก้ไขสเป็ค x64 จำนวนมาก
- เพิ่ม X64 ความหมายของการสอนแบบบรรจุภัณฑ์
- แก้ไขคำแนะนำ x86 SSE ต่างๆ
- แก้ไขปัญหา x86 ต่าง ๆ (FISTTP/SETCC/PUSH IMM8/MOVQ)
- v2.4.4
- เพิ่มความหมายคำสั่ง SSE บางอย่าง
- เพิ่มแพ็คเกจ ui.graphics qt พร้อมคลาสรายการบล็อก/func/xfunc
- เพิ่มแพ็คเกจ UI.Graphics GTK เริ่มต้น
- ย้าย vltable ในคลาส ui.views.blockview
- แก้ไข X86/64 การถอดรหัส/การสร้าง/ความหมายต่างๆ
- v2.4.3
- เพิ่มแพ็คเกจ ui.graphics (ว่าง)
- เพิ่มโมดูล ui.views ด้วยการสนับสนุนสำหรับ block/func/xfunc
- เพิ่มคลาส ui.render.vltable ลงในตารางพิมพ์สวย
- ปรับปรุงคลาสการเรียนการสอนคลาสเพื่อเข้าถึงโทเค็น PP
- ทำความสะอาดอัลกอริทึม ITERCFG และ LBACKWARD
- เพิ่มคลาสนิพจน์ VECW เพื่อแสดงการแสดงออกของ VEC 'กว้าง'
- ปรับปรุงการเขียนหน่วยความจำของนิพจน์ VEC
- ปรับปรุงการขยายและจุดแก้ไขใน func.makemap ()
- เพิ่มแอตทริบิวต์ 'type' (std/pc/flags/stack/อื่น ๆ )
- กำหนดประเภทการลงทะเบียนสำหรับ x86 arch
- แก้ไข X86/64 การถอดรหัส/จัดตั้ง/ความหมาย
- อัปเดต Travis config แก้ไข pytest กับโทเค็น
- v2.4.2
- ผสานการสนับสนุนสำหรับ pygments วิธีการพิมพ์สวย (ในโมดูล ui.render)
- เพิ่ม X86 Hilighted Formatter (ใน arch.x86.formats)
- เปิดเผยอินเทอร์เฟซการพิมพ์สวยของนิพจน์ (exp.pp (), exp.toks ())
- ลบการแข่งขัน config class เริ่มต้น (configparser เป็นมาตรฐาน)
- รวมตัวอย่างและการทดสอบบางอย่างที่พอร์ตไปยังแพ็คเกจ pytest
- ใช้ setuptools เพิ่ม tox.ini และ travis-ci config
- แก้ไขความหมาย x86/x64
- ปรับปรุงรูปแบบ SPARC V8
- เพิ่มการลงทะเบียน Coprocessor
- อัปเดต readme
- v2.4.1
- เพิ่มการวิเคราะห์ lbackward และ func.makemap () การใช้งาน
- เพิ่มคลาสนิพจน์ VEC เพื่อแสดงชุดของนิพจน์
- เพิ่มฟังก์ชั่นการผสานและการขยาย
- อนุญาตให้ผ่านอินสแตนซ์ Smt Solver ใน exp.to_smtlib ()
- เพิ่มวิธี Funchelpers ในคลาสระบบที่ใช้ x86
- เพิ่มคลาสเซสชัน/เดซิเบลและวิธีการเฉพาะของดอง
- เพิ่มวิธีการ "ความคืบหน้า" ในคลาสบันทึกเพื่อให้ข้อเสนอแนะ
- เพิ่มแพ็คเกจภายนอกที่ต้องการใน setup.py
- แก้ไขความหมาย x86/x64
- ปรับปรุงรูปแบบ SPARC V8
- อัปเดต readme
- v2.4.0
- Merge Z3 Solver Interface ดูวิธี SMT.PY และ SMTLIB () EXP
- ผสานการวิเคราะห์ fbackward และคลาส Func คลาส
- ปรับปรุงนิพจน์: แยก unary และ binary ops, "ปกติ" นิพจน์
- ปรับปรุง Mapper ด้วยวิธีการหน่วยความจำ () และตัวดำเนินการองค์ประกอบที่ทนต่อนามแฝง
- ปรับปรุงคลาส MemoryZone: ส่งคืนชิ้นส่วนนิพจน์ด้านบนแทนการเพิ่ม MemoryError
- การเพิ่มคลาส RawExec สำหรับอินพุตเหมือน ShellCode
- รองรับการป้อนข้อมูลสตริงในคลาส ELF/PE
- แก้ไขข้อบกพร่อง x86/x64 ต่างๆ
- ป้องกันการปรับขนาดการลงทะเบียน Env
- เพิ่ม win64 loader
- ปรับระดับบันทึกและไฟล์เสริมจาก Conf
- อัปเดต readme
- v2.3.5
- เพิ่ม x64 arch + เต็ม x86/64 sse decoder
- hotfix x86/x64 การผกผันของ {88}/{8a} คำสั่ง mov
- แก้ไขตัวถอดรหัสและความหมาย x86 ต่างๆ
- รหัสเครื่องสำอาง
- v2.3.4
- Merge ARMV7/thumb ความหมายคงที่
- เพิ่มตัวถอดรหัส x86 FPU
- เพิ่มฟังก์ชั่นค้นหาใน MemoryMap
- แก้ไข core read_instruction บนขอบเขตแผนที่
- แก้ไขการแยกวิเคราะห์การนำเข้า PE และ TLS Table Builder
- ตัวถอดรหัสทั่วไป
- hotfix ตัวถอดรหัส x86 ต่างๆ
- เพิ่มตัวถอดรหัส x86 SSE
- v2.3.3
- รองรับไมโครคอนโทรลเลอร์ MSP430 และ PIC18
- แก้ไข SPARC Rett, UDIV/SDIV และรูปแบบ
- แก้ไขการถอดรหัสคำสั่ง JCXZ x86
- v2.3.2
- ผสานสถาปัตยกรรม Z80/GB, Fix SPARC รายงานปัญหา
- เพิ่มตัวอย่างของการถอดรหัส SSE2 (แก้ไข)
- v2.3.1
- เพิ่มไฟล์ใบอนุญาต
- แก้ไขสถาปัตยกรรม sparc
- หลีกเลี่ยงนิพจน์ PTR เมื่อที่อยู่ไม่ใช่ deref
- แก้ไขกฎง่ายขึ้น eqn_helpers
- readme อัปเดตแล้ว
- คลาส PE ใหม่ (ทดสอบบน cost.exe) + สนับสนุนสำหรับหลายจุดเข้าร่วม