Basit bir c programının gcc'sini kullanarak derlenmiş bir ikili dosyam var. Kendi disketleyicimi yazıyorum, ELF başlığını ve ELF dosyalarından diğer başlıkları okuyabiliyorum.Opcode/makine kodundan montaj talimatları veya anımsatılar nasıl edinilir?
ELF ikili dosyasından ".text" bölümünü okuyorum. Ve operasyonu mnemonics/assembly komutuna dönüştürmeye çalışıyorum.
Nasıl ham opcode/makine kodu mnemonics/assembly komutuna dönüştürülür ?? C kaynak kodu:
#include <stdio.h>
int main()
{
int i = 10;
int j = 22 + i;
return 0;
}
takiben i ELF dosyasını okuduktan sonra aldık ham opcode örneğidir:
55 ffffff89 ffffffe5 ffffff83 ffffffec 20 ffffffc7 45 ffffffec 3 ffffffc7 45
fffffff0 41 ffffffc7 45 fffffff4 8 ffffffc7 45 fffffff8 21 ffffff8b 45
ffffffec ffffff83 ffffffc0 16 ffffff89 45 fffffffc ffffffb8 ffffffc9 ffffffc3
Disassembler'ınızın muhtemelen tüm opcodes'ların bir listesini ve bunlara karşılık gelen talimatları eklemesi gerekir ve ayrıca tüm önekleri ve ModR/M ve SIB baytlarını ayrıştırmak zorunda kalır. Tüm bu bilgileri [Intel'in kılavuzları] 'nda bulabilirsiniz (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html). – Michael
Kodunuzu düzeltmeniz gerekir, böylece 8 bit değerlerini yazdırmadan önce 32 bit'e kadar uzatmaz. –
** 'imzasız char' ** seçeneğini kullanarak opcode değerlerini okuyun ve'% 02x' ile yazdırın. –