Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Disassembler: Wie negative Werte von Positiven untersche

  Alt 1. Dez 2008, 21:26
Oki danke für eure Antworten. Kennt jemand diese Engine: http://patkov-site.narod.ru/eng.html

Ich wurschtele mir nämlich grade Code zusammen, das gibts gar nicht Folgende Struktur bekomme ich für jede Instruction geliefert:

Delphi-Quellcode:
type
  hde32s = packed record
    len: Byte;
    p_rep: Byte;
    p_lock: Byte;
    p_seg: Byte;
    p_66: Byte;
    p_67: Byte;
    opcode: Byte;
    opcode2: Byte;
    modrm: Byte;
    modrm_mod: Byte;
    modrm_reg: Byte;
    modrm_rm: Byte;
    sib: Byte;
    sib_scale: Byte;
    sib_index: Byte;
    sib_base: Byte;
    imm: packed record case Byte of
      0: (imm8: Byte);
      1: (imm16: Word);
      2: (imm32: LongWord);
    end;
    disp: packed record case Byte of
      0: (disp8: Byte);
      1: (disp16: Word);
      2: (disp32: LongWord);
    end;
    rel: packed record case Byte of
      0: (rel8: Byte);
      1: (rel16: Word);
      2: (rel32: LongWord);
    end;
    Flags: LongWord;
  end;
So das Problem ist, dass ich nicht weiß wie ich für alle Operanden die dazugehörigen "Flags" ermitteln kann. Teilweise werden ja die selben Opcodes für verschiedene Sachen verwendet. Z.b.

Code:
add [eax + $12], $04
add [eax], $04

add eax, ecx
add eax, [ecx]
Also muss ich für jeden Operanden wissen, ob es sich um eine Zahl oder um ein Register handelt, ob die Dereferenzierungs-Klammern drum müssen und auf welchen Operanten (fals verwendet) das Register passt. (ds:eax; cs:[$45]) Und dann kann ja theoretisch noch for jedem Operand irgendwas in der Art "dword ptr" oder "byte ptr" stehen.

Besonders lustig ist es bei den "add" Opcodes, welche gleich den "sub" Opcodes sind

Hat da jemand ne Idee für mich?
  Mit Zitat antworten Zitat