AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Disassembler: Wie negative Werte von Positiven unterscheiden
Thema durchsuchen
Ansicht
Themen-Optionen

Disassembler: Wie negative Werte von Positiven unterscheiden

Offene Frage von "Zacherl"
Ein Thema von Zacherl · begonnen am 1. Dez 2008 · letzter Beitrag vom 1. Dez 2008
 
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, 20: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz