CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » Andere CP/M-Versionen » Erstellen eines Quell-Listings » Threadansicht

Autor Thread - Seiten: -1- [ 2 ]
000
08.05.2005, 20:43 Uhr
Deff



Hallo,
habe die, vielleicht im ersten Zupacken, etwas wahnwitzig klingende Anfrage:
Wie kann man am besten ein CP/M, das im ROM abgelegt ist, so reassemblieren, dass als Resultat ein vernünftig dokumentiertes Quell-Listing entsteht?

Vielleicht kommt mit meiner Frage auch wieder etwas mehr Leben in das Forum bzw. zumindest in dieser Rubrik!

Gruß
Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
09.05.2005, 13:24 Uhr
Detlev



Hallo Deff,

das klingt nach viel Zeitaufwand, mit unbekannten Ergebnis...
Die Lösung dürfte wohl so beginnen
1. Einsprungadressen als solche zu erkennen und durch Texte (Label,Makro wie es auch immer heißen soll) zu ersetzen. (= Sprungbefehle erkennen und analysieren)
2. Sinngmäß das gleiche für wiederkehrende Parameter (z.B. Bitmuster zum UNDen /ODERn) durchführen (bClearWd ist aussagekräftiger als 0x40)
3. Die Label aus 1 und 2 durch vom Benutzer zu wählende sinnvolle Bezeichner ersetzen (Handarbeit)
4. Zusammenhängenen Code erkennen und als Block kennzeichnen
(1. Ansatz: nach jeder Einsprungadresse trennen)

1,2 und 4 sollte mit Makrorecordern einigermaßen möglich sein.

5. Ausführzeit der Blöcke und davon beeinflusste Flags berechnen lassen.
Da geht's ans eingemachte, gute Kenntnis der Hardware ist gefordert.

Zum Test sollte ein gut dokumentierter Code disassembliert werden, um zu sehen wie gut die Analyse schon funktioniert.

Viel Erfolg wünscht

Detlev

Dieser Post wurde am 09.05.2005 um 13:25 Uhr von Detlev editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
09.05.2005, 19:45 Uhr
Deff



Hallo Detlev,
diese 5-Punkte-Anleitung beginnt genau mit dem einleitenden Satz, den ich vorhergesehen habe. Er darf mich aber nicht abschrecken und ist als solcher auch nicht von Dir geschrieben worden.

Kannst Du mir eine Literatur- und eine Software-Empfehlung noch mit auf den Weg geben, speziell für den Macrorecorder?

Danke Dir für Deine bisherigen und noch kommenden Mühen!

Gruß
Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
09.05.2005, 20:45 Uhr
HD64180CPM



Hallo Deff,

als Disassembler kannt ich Dir folgende Links empfehlen.

http://www.inkland.org/

http://www.inkland.org/dz80/index.htm

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
09.05.2005, 22:45 Uhr
Deff



Hallo Rolf,

danke für den Link, aber gibt es dazu ein Tutorial (möglichst in dt.)?
Und was zeichnet dieses Proggi gegenüber anderen DA aus?

Gruß
Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
10.05.2005, 12:43 Uhr
Detlev




Zitat:
Deff postete
Hallo Detlev,
diese 5-Punkte-Anleitung beginnt genau mit dem einleitenden Satz, den ich vorhergesehen habe. Er darf mich aber nicht abschrecken und ist als solcher auch nicht von Dir geschrieben worden.

Kannst Du mir eine Literatur- und eine Software-Empfehlung noch mit auf den Weg geben, speziell für den Macrorecorder?

Danke Dir für Deine bisherigen und noch kommenden Mühen!

Gruß
Deff

Microsoft's Visual C++ 6 hat einen ganz guten Makrorecorder, aber VC6 gibt's nicht umsonst, es sei denn man nimmt die Spar-Version, die in jede EXE eine kurze Meldung a la "ich bin eine Demoversion" einbaut. Nennt sich glaub ich Autoren-Version. Ansonsten gibt es für Windows,Mac und Linux einige Progrämmchen, die mehr oder weniger frei sind, sowohl im Preis als auch im Code. Such mal auf www.heise.de im Inhaltsverzeichnis der CT nach Makrorecorder. Ist ein immer wiederkehrendes Thema. Für diese Aufgabe brauchst Du kein Wahnsinns-Tool. Die Grund-Funktionalitäten (Tastatur-Eingabe aufzeichnen, nach Textmuster suchen, Text einfügen, das alles per Knopfdruck wiederholen) sind hier gefragt. "Gurus" könnten das auch mit Batch-Dateien erledigen. Wenn Du VB, Java , C++ (...usw...) kannst, wäre es auch möglich sich kleine Progrämmchen zu schreiben. Vorteil von Makros wäre die Möglichkeit der schnellen Änderung, und der nicht zu unterschätzende Vorteil des code-lesens VOR dem Ausführen. Mit QBASIC (Teil von MS-DOS 5 und höher) ginge das bestimmt auch, das wäre dann sogar eine recht schlanke Lösung. Es kann sein daß QBASIC unter /oldmsdos auf den Win95 bzw Win98 CDs drauf ist, bin mir aber nicht sicher. Ist lange her daß ich was damit gemacht habe...

bis demnächst

Detlev
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
006
10.05.2005, 20:16 Uhr
HD64180CPM



Hallo Deff,

da ich den Assembler ASide v1.13 als Vollversion habe kann den vom
vom Disassembler dZ80 erzeugte Assembler-Datei gleich testen.

Beide Programme sind auch für einen Z180 gedacht.

Der Assembler ASide v1.13 ist in deutscher Sprache.

Von einer Anleitung für den Disassembler dZ80 weiss ich leider nichts.
Einfach mal testen was er halt macht.

Alle beiden Programme laufen auf meinen Windows 2000 Rechner.

Link zur Assembler ASide Homepage

http://www.theeg.de/aside/index.html

Ich habe noch einen guten Disassembler der in der DOS-Box läuft
weiss aber nicht wo ich den weg habe.

Disassembler heisst DASM.EXE V1.2

Author: John Wilson

DASM is a simple disassembler for Z-80, 8051, 8080/8085, 8086,or DEC PDP-8 binary files



Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
007
11.05.2005, 08:45 Uhr
Deff



Hallo Ihr Zwei,

bin echt von Eurer Hilfe begeistert - vielen Dank dafür!

Gruß
Deff

Dieser Post wurde am 11.05.2005 um 09:02 Uhr von Deff editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
008
07.06.2005, 01:13 Uhr
Alexander



Hallo

Ich habe das ganze vor ein paar Jahren mal machen müssen und dabei hat mir IDAfree in der Freewareversion sehr gut unter die Arme gegriffen. Leider haben sie die Freewareversion wieder von ihrer Seite genommen. Ich glaube aber, man kann sie hier und da noch legal im Netz finden.

Als guten bzw. sehr guten Assembler könnte ich auch den Arnold Assembler empfehlen.

Gruß
Alexander
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
009
08.06.2005, 07:43 Uhr
Deff



Danke Alexander,

werde mich mal auf die Suche nach den beiden begeben.

Gruß
Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
010
13.06.2005, 22:13 Uhr
Holger



Also, den ASide kann ich nur empfhelen, der beherscht sogar die undokumentierten befehle des Z80. Den 8049, 8051 und AVR kann er auch noch. Kosten tut er nur 8 EUR für privat.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
011
16.06.2005, 19:50 Uhr
Deff



Ist bei mir angekommen, Holger! Habe seit dem Beitrag von HD64180CPM den ASIDE auf der Liste. Danke!
Gruß
Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
012
26.01.2006, 07:19 Uhr
old_hans



Hallo Def,

Ich habe heute Ihr vorhaben gelesen und etwas gleiches hab Ich in sin.
Wie weit stehen Sie hier mit und gibt es empfelungen?

Groetjes,
Hans
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
013
27.01.2006, 15:34 Uhr
Deff



Hallo Hans,
über das Downloaden der empfohlenen Software bin ich schon hinaus, aber zu mehr eben auch nicht. Andere Dinge waren z.Z. wichtiger als dieses Vorhaben hier. Ich bleibe aber auf alle Fälle dran am Problem!

Gruß

Deff
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
014
28.01.2006, 22:01 Uhr
HD64180CPM



Hallo Hans,

ich habe im Jahr 2003 mal ein EPROM von einen SYSTEC-Platinencomputer
mit den Disassembler dZ80 Disassembly.

; Disassembly of the file "CHD64180\SYSTEC\D0001\SYSTEC01.BIN"
;
; CPU Type: Z80
;
; Created with dZ80 1.50
;
; on Tuesday, 27 of May 2003 at 05:07 PM
;

Dann den die Datei SYSTECZ80CPM5LA.ASM mit den
Assembler ASide v1.13 bearbeitet.

Danach die vom Assembler ASide v1.13 erzeugte Datei SYSTECZ80CPM5LA.BIN
mit Hilfe von Windiff mit der Datei SYSTEC01.BIN verglichen.

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
015
26.03.2007, 23:24 Uhr
timetube

Avatar von timetube


Zitat:
Deff postete
Hallo,
habe die, vielleicht im ersten Zupacken, etwas wahnwitzig klingende Anfrage:
Wie kann man am besten ein CP/M, das im ROM abgelegt ist, so reassemblieren, dass als Resultat ein vernünftig dokumentiertes Quell-Listing entsteht?

Vielleicht kommt mit meiner Frage auch wieder etwas mehr Leben in das Forum bzw. zumindest in dieser Rubrik!

Gruß
Deff

Na da will ich mal schnell noch drauf antworten

Der IDA (http://www.datarescue.com/) ist wirklich ein sehr gutes, wenn auch nicht gerade billiges Tool um für alle möglichen CPUs ein „revers engineering“ zu machen.

Das Ergebnis einer solchen IDE Analyse sieht dann z.B. so aus:
OK, das sauber, gut leserlich formatierte Listings geht hier nun verlohren, genau wie die Zeichensatzumsetzung.


;
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º This file is generated by The Interactive Disassembler (IDA) º
; º Copyright (c) 2004 by DataRescue sa/nv, <ida@datarescue.com> º
; º Licensed to: Juergen Sievers - N.A.D.I.N.E. Software, 1 user, adv, 12/2003 º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
;
; File Name : CDokumente und Einstellungen\jsievers\Desktop\abc24\INITIAL.COM
; Format : Binary File
; Base Address: 0000h Range: 0100h - 0900h Loaded length: 0800h

; Processor : z80 []
; Target assembler: Zilog Macro Assembler

; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

; Segment type: Regular
segment RAM
ds 5
ENTRY: ds 1 ; CODE XREF: RAM:0108p RAM:011Bp ...
GOCPM: ds 2
ds 1
unk_9: ds 1
iobuff: ds 1
byte_B: ds 0ECh
off_F7: ds 2 ; DATA XREF: sub_2C2+37o sub_2C2+5Bo
ds 7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
start: ld sp, piobuff ; "\n"
ld c, PRTSTR
ld de, INTRO ; "\r\nMINI FLOPPY DISK INITIALIZER$"
call ENTRY

startinit: ; CODE XREF: RAM:029Bj
xor a
ld (Track), a
ld (Sector), a
inc a
ld (AktSecence), a

getdrive: ; CODE XREF: RAM:012Fj RAM:0134j
; DATA XREF: ...
ld c, PRTSTR
ld de, RQDRIVE ; "\r\nDRIVE (A-D) ? $"
call ENTRY
ld c, RDBUFF
ld de, piobuff ; "\n"
call ENTRY
ld hl, getdrive
call SeekLastInput ; ret HL if no input
ld a, (hl)
cp 'A'
jp c, getdrive
cp 'E'
jp nc, getdrive
sub 'A'
ld (DRIVE), a

getdensity: ; CODE XREF: RAM:015Dj
; DATA XREF: RAM:014Co
ld de, RQDENSITY ; "\r\nDOUBLE DENSITY (Y/N) ? $"
ld c, PRTSTR
call ENTRY
ld c, RDBUFF

loc_146: ; "\n"
ld de, piobuff
call ENTRY
ld hl, getdensity
call SeekLastInput ; ret HL if no input
ld a, (hl)
cp 'N'
jp z, singled
cp 'Y'
jp z, dobled
jp getdensity
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

singled: ; CODE XREF: RAM:0155j
xor a
ld b, 1
jp setdensity
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

dobled: ; CODE XREF: RAM:015Aj
ld a, 80h
ld b, 2

setdensity: ; CODE XREF: RAM:0163j
ld (DENSITY), a ; 80=double, 01=sigle
ld a, b
ld (SIDES), a
ld a, 9
ld (SECTORS), a

WrongSequence: ; CODE XREF: RAM:0194j RAM:0199j
ld c, PRTSTR
ld de, RQSEQUENCE ; "\r\nSEQUENCE CODE (1/2/3/4/5) ? $"
call ENTRY
ld c, RDBUFF
ld de, piobuff ; "\n"
call ENTRY
ld hl, DefSequence
call SeekLastInput ; ret HL if no input
ld a, (hl)
jp setsequence
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Lohnt sich aber nur wenn man sowas öfter machen muss.
tt.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.

Dieser Post wurde am 26.03.2007 um 23:26 Uhr von timetube editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
016
03.04.2007, 21:12 Uhr
Peter Dassow

Avatar von Peter Dassow


Zitat:
timetube postete
Na da will ich mal schnell noch drauf antworten

Der IDA (http://www.datarescue.com/) ist wirklich ein sehr gutes, wenn auch nicht gerade billiges Tool um für alle möglichen CPUs ein „revers engineering“ zu machen.

Das Ergebnis einer solchen IDE Analyse sieht dann z.B. so aus:
OK, das sauber, gut leserlich formatierte Listings geht hier nun verlohren, genau wie die Zeichensatzumsetzung.


;
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º This file is generated by The Interactive Disassembler (IDA) º
; º Copyright (c) 2004 by DataRescue sa/nv, <ida@datarescue.com> º
; º Licensed to: Juergen Sievers - N.A.D.I.N.E. Software, 1 user, adv, 12/2003 º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
;
; File Name : CDokumente und Einstellungen\jsievers\Desktop\abc24\INITIAL.COM
; Format : Binary File
; Base Address: 0000h Range: 0100h - 0900h Loaded length: 0800h

; Processor : z80 []
; Target assembler: Zilog Macro Assembler

; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ

; Segment type: Regular
segment RAM
ds 5
ENTRY: ds 1 ; CODE XREF: RAM:0108p RAM:011Bp ...
[....]
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Lohnt sich aber nur wenn man sowas öfter machen muss.
tt.

Ich komme damit nicht wirklich zurecht.... in IDA muss man wohl RAM, ROM, und FILE-Grenze eingeben... wenn ich da für RAM 0000-F000, für ROM F000-FFFF, und für die Datei 0100-"Dateilänge in HEX" eingebe, kriege ich eine Assemblerdatei, die den kompletten 64KB Bereich (mit vielen Nullen oder Einsen) abbildet. Wie kriege ich mit dem ach so tollen IDA eine schlankere Datei hin, die ich am Besten auch gleich wieder in den M80 stecken kann ??

Gruss
Peter
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
017
05.04.2007, 21:35 Uhr
timetube

Avatar von timetube

Lohnt sich aber nur wenn man sowas öfter machen muss.
tt. Ich komme damit nicht wirklich zurecht.... in IDA muss man wohl RAM, ROM, und FILE-Grenze eingeben... wenn ich da für RAM 0000-F000, für ROM F000-FFFF, und für die Datei 0100-"Dateilänge in HEX" eingebe, kriege ich eine Assemblerdatei, die den kompletten 64KB Bereich (mit vielen Nullen oder Einsen) abbildet. Wie kriege ich mit dem ach so tollen IDA eine schlankere Datei hin, die ich am Besten auch gleich wieder in den M80 stecken kann ??

Grus
Peter Hi,

iHi,

ich habe möglicherweise mit meinem Quickly ein schlechtes Beispiel gewählt. Du musst keine verschieden Segmente definieren, kannst auch sagen das alles in einem Ram oder Rom Segment liegt.

Der Vorteil dabei überhaupt verschiedenen Adressen Segmente zuweisen zu können ist aber ein mächtiges Feature vom DIE.

Ich kann zum Bleistift ein ROM Image von einer Maschinen in den passenden Adressraum Laden, dann noch ein z.B. CP/M, um dann erst ein Programm zu laden, das mich wirklich interessiert. Alle Verweise in das CP/M und/oder ROM werden dann natürlich entsprechend Namentlich (auch was die Call-Konventionen und Parameternamen anbelangt), aufgelöst in der zu untersuchenden Partition. IDA erkennt auch so genannte Fliert Signaturen, erkennt also die Borland/Windows und noch diverse Libraries, mit denen einen Programm gelinkt wurde. Da wird dann aus sowas wie open, clos usw. wieder ein symbolisiert Aufruf dargestellt, mit verwendeten Parametern typecht.

Wenn ich damit dann durch bin, kann er für Dein Assembler Listing gleich die Externals richtig definieren usw.

Der IDA deckt die modernen CPUs und Speichermodel also genau so ab, wie das FLAT-Model der z80 Welt, wo ja eigentlich nicht wirklich von Segmenten gesprochen wird sondern mehr von Pages/Bänke oder ROM/RAM Areals.

Hier mal ein Beispiel aus der Windows Welt. Die Windows DLL cards.dll

j.

.idata:70121000
.idata:70121000 ; Segment type: Externs
.idata:70121000 ; _idata
.idata:70121000 ; BOOL __stdcall BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD)
.idata:70121000 extrn BitBlt:dword ; DATA XREF: cdtDrawExt+1A6r
.idata:70121004 ; BOOL __stdcall PatBlt(HDC,int,int,int,int,DWORD)
.idata:70121004 extrn PatBlt:dword ; DATA XREF: cdtDrawExt+2Br
.idata:70121004 ; cdtDrawExt+C8r ...
.idata:70121008 ; COLORREF __stdcall GetPixel(HDC,int,int)
.idata:70121008 extrn GetPixel:dword ; DATA XREF: sub_70121095+26r
.idata:70121008 ; sub_70121095+34r ...
.idata:7012100C ; COLORREF __stdcall SetPixel(HDC,int,int,COLORREF)
.idata:7012100C extrn SetPixel:dword ; DATA XREF: sub_70121190+26r
.idata:7012100C ; sub_70121190+39r ...
.idata:70121010 ; BOOL __stdcall DeleteObject(HGDIOBJ)
...
...
.text:701210BB mov esi, ds:GetPixel
.text:701210C1 push edi
.text:701210C2 push [ebp+arg_C] ; int
.text:701210C5 push ebx ; int
.text:701210C6 push [ebp+arg_0] ; HDC
.text:701210C9 call esi ; GetPixel
.text:701210CB mov edi, [ebp+arg_4]
.text:701210CE push [ebp+arg_C] ; int
.text:701210D1 mov [edi], eax
.text:701210D3 lea eax, [ebx+1]
.text:701210D6 push eax ; int
.text:701210D7 push [ebp+arg_0] ; HDC
.text:701210DA call esi ; GetPixel
.text:701210DC mov [edi+4], eax
.text:701210DF mov eax, [ebp+arg_C]
.text:701210E2 inc eax
.text:701210E3 push eax ; int
.text:701210E4 push ebx ; int
.text:701210E5 push [ebp+arg_0] ; HDC
.text:701210E8 call esi ; GetPixel
.text:701210EA push [ebp+arg_C] ; int
.text:701210ED mov [edi+8], eax
.text:701210F0 mov eax, [ebp+arg_10]
.text:701210F3 lea ebx, [ebx+eax-1]
.text:701210F7 push ebx ; int
.text:701210F8 push [ebp+arg_0] ; HDC
.text:701210FB call esi ; GetPixel
...

.data:70122000 _data segment para public 'DATA' use32
.data:70122000 assume cs:_data
.data:70122000 ;org 70122000h
.data:70122000 ; int dword_70122000
.data:70122000 dword_70122000 dd ? ; DATA XREF: sub_70121095+15r
.data:70122000 ; sub_70121190+15r ...
.data:70122004 ; int dword_70122004
.data:70122004 dword_70122004 dd ? ; DATA XREF: sub_70121095+6r
.data:70122004 ; sub_70121190+6r ...
.data:70122008 ; HGDIOBJ dword_70122008
.data:70122008 dword_70122008 dd ? ; DATA XREF: cdtDrawExt:loc_7012160Ew
.data:70122008 ; cdtDrawExt:loc_70121613r ..
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.

Dieser Post wurde am 05.04.2007 um 21:40 Uhr von timetube editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
018
06.04.2007, 11:39 Uhr
Peter Dassow

Avatar von Peter Dassow


Zitat:
timetube postete
Der Vorteil dabei überhaupt verschiedenen Adressen Segmente zuweisen zu können ist aber ein mächtiges Feature vom IDA.

Das stimmt, der besseren Lesbarkeit wegen...

Zitat:
Ich kann zum Bleistift ein ROM Image von einer Maschinen in den passenden Adressraum Laden, dann noch ein z.B. CP/M, um dann erst ein Programm zu laden, das mich wirklich interessiert. Alle Verweise in das CP/M und/oder ROM werden dann natürlich entsprechend Namentlich (auch was die Call-Konventionen und Parameternamen anbelangt), aufgelöst [...]

Hier mal ein Beispiel aus der Windows Welt. Die Windows DLL cards.dll

j.

.idata:70121000
.idata:70121000 ; Segment type: Externs
.idata:70121000 ; _idata
.idata:70121000 ; BOOL __stdcall BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD)
.idata:70121000 extrn BitBlt:dword ; DATA XREF:
[...]
..

Für die Windows-Welt kenne ich noch weitere Tools (z.B. SoftIce), ich kann auch den Kommandozeilen-DEBUG aus dem Schlaf. Es ging halt um einen Disassembler, der auch M80-konformen Source wieder ausgibt... da ist wohl IDA (Pro) nicht geeignet dazu.... der Z80DIS (siehe weiter oben) macht da schon eher konformen Sourcecode - auch wenn der nur unter CP/M läuft.
Ich habe eigentlich ein Werkzeug gesucht, um das MSX2 CP/M Plus 3.0 zumindest teilweise zu disassemblieren.... aber ich habe bereits bei den ersten Versuchen gesehen, dass da kräftig in den ROM-Bereich verwiesen wird.... scheint wohl eine properitäre CP/M Implementation zu sein :-(
Dachte immer, nur die paar CP/M Bios Calls, die I/O auf der Platte und auf dem Bildschirm machen, greifen auf's ROM zu und sonst ist alles RAM resident bzw. CP/M TPA bezogen.... da lobe ich mir CP/M 2.2 .... das ist viel (!) einfacher aufgebaut.
Vielleicht probiere ich es lieber mal mit dem Philips P2000C statt mit dem MSX2 Rechner.... habe einen gestern ersteigert, mir fehlt nur noch eine physisch vorhandene CP/M 2.2 Diskette (160KB) zum Ausprobieren. Leider habe ich z.Z. kein PC mit einem 5,25" Laufwerk aktiv... so muss ich wohl jemand suchen, der mir so eine Diskette mal zuschicken kann.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
019
06.04.2007, 14:05 Uhr
timetube

Avatar von timetube


Zitat:
Peter Dassow postete
Für die Windows-Welt kenne ich noch weitere Tools (z.B. SoftIce), ich kann auch den Kommandozeilen-DEBUG aus dem Schlaf. Es ging halt um einen Disassembler, der auch M80-konformen Source wieder ausgibt... da ist wohl IDA (Pro) nicht geeignet dazu.... der Z80DIS (siehe weiter oben) macht da schon eher konformen Sourcecode - auch wenn der nur unter CP/M läuft.
Ich habe eigentlich ein Werkzeug gesucht, um das MSX2 CP/M Plus 3.0 zumindest teilweise zu disassemblieren.... aber ich habe bereits bei den ersten Versuchen gesehen, dass da kräftig in den ROM-Bereich verwiesen wird.... scheint wohl eine properitäre CP/M Implementation zu sein :-(
Dachte immer, nur die paar CP/M Bios Calls, die I/O auf der Platte und auf dem Bildschirm machen, greifen auf's ROM zu und sonst ist alles RAM resident bzw. CP/M TPA bezogen.... da lobe ich mir CP/M 2.2 .... das ist viel (!) einfacher aufgebaut.
Vielleicht probiere ich es lieber mal mit dem Philips P2000C statt mit dem MSX2 Rechner.... habe einen gestern ersteigert, mir fehlt nur noch eine physisch vorhandene CP/M 2.2 Diskette (160KB) zum Ausprobieren. Leider habe ich z.Z. kein PC mit einem 5,25" Laufwerk aktiv... so muss ich wohl jemand suchen, der mir so eine Diskette mal zuschicken kann.

Hi Peter.

1.
Ja, SoftIce war zumindesten zu "vor Quemm Zeitzen" das Tool der wahl, um x86 zu Debuggen. Da er im PM Mode lief, konnte man damit wirklich prima selbst bis ins DOS/BIOS hinterher debuggen. Aber für win32 (Protected mode OS) kenne ich den nicht mehr.

2.
Also, meine Version IDA kann für den z80 für folgende Assembler den Quelcode erzeugen. Ist schon etwas veraltet, aber ich denke da ist für jeden was dabei

Zilog Macro Aseembler
Table Driven Assembler (TASM)
X-M80 Ny Leo Sandy
PseudoSam by PseudoCode
Cross 16 by Universal Cross Assemblers
A80 by ANTA electronics
Avovet Macro Preprocessor v1.0 by Avocet Systems
ASxxxx by Alan R.Baldwin v1.5

Wenn man bedenkt, dass der ungf. 50 verschiedene CPUs unterstütz und für jede mindestens 3-4 Sourceformate, dann ist er für fast jeden Fall das richtige Tool um "reverse engineering" zu betreiben. Nur der Preis, der ist einfach zu hoch geworden mit der Zeit.

3. plus-pack

Ach ja, so eine P2000C Disk, die hätte ich auch noch, weiss bloss nicht wo ich die hinlegen müsste, damit Du sie finden kannst.

Ich lass auch Dein Posting unter coc. Mein P200C hat auch ein IPL 1.1, so sollte eine damit erstellte Disk schon gehen auf Deinem P2000C.

j.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.

Dieser Post wurde am 06.04.2007 um 14:10 Uhr von timetube editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
020
06.04.2007, 16:30 Uhr
Peter Dassow

Avatar von Peter Dassow


Zitat:
timetube postete
1.
Ja, SoftIce war zumindesten zu "vor Quemm Zeitzen" das Tool der wahl, um x86 zu Debuggen. Da er im PM Mode lief, konnte man damit wirklich prima selbst bis ins DOS/BIOS hinterher debuggen. Aber für win32 (Protected mode OS) kenne ich den nicht mehr.

SoftIce 4.x unterstützt auch noch Windows 95/98 und Windows 2000, wie's mit XP aussieht weiss ich nicht.

Zitat:
2.
Also, meine Version IDA kann für den z80 für folgende Assembler den Quelcode erzeugen. Ist schon etwas veraltet, aber ich denke da ist für jeden was dabei

Zilog Macro Aseembler
Table Driven Assembler (TASM)
X-M80 Ny Leo Sandy
PseudoSam by PseudoCode
Cross 16 by Universal Cross Assemblers
A80 by ANTA electronics
Avovet Macro Preprocessor v1.0 by Avocet Systems
ASxxxx by Alan R.Baldwin v1.5

Wenn man bedenkt, dass der ungf. 50 verschiedene CPUs unterstütz und für jede mindestens 3-4 Sourceformate, dann ist er für fast jeden Fall das richtige Tool um "reverse engineering" zu betreiben. Nur der Preis, der ist einfach zu hoch geworden mit der Zeit.

Ähhh... ich lass gerade das Gegenteil:
http://www.datarescue.com/idabase/idadoc/619.htm
"NOTE: For the moment IDA supports only a generic assembler for 80x86 processors."
Ich kann nur den Prozessortyp in IDA Pro 5.0 einstellen ;-(


Zitat:
3. plus-pack

Ach ja, so eine P2000C Disk, die hätte ich auch noch, weiss bloss nicht wo ich die hinlegen müsste, damit Du sie finden kannst.

Ich lass auch Dein Posting unter coc. Mein P200C hat auch ein IPL 1.1, so sollte eine damit erstellte Disk schon gehen auf Deinem P2000C.

j.

Na ich bräuchte Sie wohl per Post (Adresse kann ich auf "Bedarf" ja per persönlicher Mail hinterlegen), solange ich mein 5,25" Laufwerk nicht reaktivieren kann. Aber lass mal, ich schau mal ob ich es nicht doch noch hinkriege, per TeleDisk die Disketten zu schreiben.

Gruss
Peter
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
021
06.04.2007, 21:29 Uhr
HD64180CPM



Hallo Peter,

bei meiner IDA Version habe ich diese Einstellung.

; Format : Binary File
; Base Address: 0000h Range: 0000h - 1000h Loaded length: 1000h

; Processor: z80
; Target assembler: X-M-80 by Leo Sandy
.Z80

; Segment type: Regular
; segment 'seg000'

Gruss
Rolf
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
022
06.04.2007, 22:46 Uhr
timetube

Avatar von timetube


Zitat:
Ähhh... ich lass gerade das Gegenteil:
http://www.datarescue.com/idabase/idadoc/619.htm
"NOTE: For the moment IDA supports only a generic assembler for 80x86 processors."
Ich kann nur den Prozessortyp in IDA Pro 5.0 einstellen ;-(


3. plus-pack

Dir ist schon klar, dass der 80x86 nichts mit einem Z80 zu tun hat oder ?
Ich meine Du wolltest doch CP/M Roms verarbeiten, meintest du cp/m 86 oder wie ist das mit dem 80x86 zu verstehen?

Mein IDA kann die folgenden Prozessoren disassemplieren. Das sollte Deine Pro Version auch können.

8086 - Intel 8086
80286r - Intel 80286 real mode
80286p - Intel 80286 protected mode
80386r - Intel 80386 real mode
80386p - Intel 80386 protected mode
80486r - Intel 80486 real mode
80486p - Intel 80486 protected mode
80586r - Intel Pentium & MMX real mode (IBM PC line)
80586p - Intel Pentium & MMX prot mode
80686p - Intel Pentium Pro & MMX
k62 - AMD K6-2 with 3DNow!
p2 - Intel Pentium II
p3 - Intel Pentium III
athlon - AMD K7
p4 - Intel Pentium 4
metapc - Disassemble all IBMPC opcodes
8085 - Intel 8085
z80 - Zilog 80
z180 - Zilog 180 (Zilog 80 line)
z380 - Zilog 380
64180 - Hitachi HD64180
gb - Gameboy
z8 - Zilog 8 (Zilog 8 line)
860xr - Intel 860 XR (Intel 860 line)
860xp - Intel 860 XP
8051 - Intel 8051 (Intel 51 line)
80196 - Intel 80196 (Intel 80196 line)
80196NP - Intel 80196NP, NU
m6502 - 6502 (65xx line)
m65c02 - 65c02
pdp11 - DEC PDP/11 (PDP line)
68000 - Motorola MC68000
68010 - Motorola MC68010
68020 - Motorola MC68020
68030 - Motorola MC68030
68040 - Motorola MC68040 (Motorola 680x0 line)
68330 - Motorola CPU32 (68330)
68882 - Motorola MC68020 with MC68882
68851 - Motorola MC68020 with MC68851
68020EX - Motorola MC68020 with both
colfire - Motorola ColdFire
68K - Motorola MC680x0 all opcodes
6800 - Motorola MC68HC00
6801 - Motorola MC68HC01
6803 - Motorola MC68HC03
6301 - Hitachi HD 6301
6303 - Hitachi HD 6303
6805 - Motorola MC68HC05 (Motorola 8bit line)
6808 - Motorola MC68HC08
6809 - Motorola MC68HC09
6811 - Motorola MC68HC11
6812 - Motorola MC68HC12
6816 - Motorola MC68HC16
java - java (Java line)
ppc - PowerPC (PowerPC line)
arm710a - ARM 7xx series
arm - the same as arm710a (ARM line)
armb - ARM big endian
xscalel - Intel xScale little endian
xscaleb - Intel xScale big endian
tms320c2- TMS320C2x series (TMS 16bit addressing line)
tms320c5- TMS320C5x series
tms320c6- TMS320C6x series (TMS VLIW line)
sh3 - Hitachi SH3 (little endian)
sh3b - Hitachi SH3 (big endian) (Hitachi SH line)
sh4 - Hitachi SH4 (little endian)
sh4b - Hitachi SH4 (big endian)
avr - ATMEL AVR (ATMEL line)
mipsl - MIPS little endian (MIPS line:R2000, R3000, R4000,
mipsb - MIPS big endian R4200, R4300, R4400, R4600,
mipsr - MIPS & RSP R8000, R10000)
r5900 - MIPS R5900
h8300 - H8/300x in normal mode
h8300a - H8/300x in advanced mode (Hitachi H8 line)
h8s300 - H8S in normal mode
h8s300a - H8S in advanced mode
h8500 - H8/500 (Hitachi H8/500 line)
pic12cxx- Michrochip PIC 12Cxx
pic16cxx- Michrochip PIC 16Cxx (PIC line)
pic18cxx- Michrochip PIC 18Cxx
sparcb - SPARC big endian
sparcl - SPARC little endian (SPARC line)
alphab - DEC Alpha big endian
alphal - DEC Alpha little endian (ALPHA line)
hppa - HP PA-RISC big endian (HP PA-RISC line)
dsp56k - Motorola DSP 5600x (DSP 5600x line)
c166 - Siemens C166
c166v1 - Siemens C166 v1 family
c166v2 - Siemens C166 v2 family (C166 line)
st10 - SGS-Thomson ST10
super10 - Super10
st20 - SGS-Thomson ST20/C1 (ST20 line)
st20c4 - SGS-Thomson ST20/C2-C4
st7 - SGS-Thomson ST7 (ST7 line)
ia64l - Intel Itanium little endian
ia64b - Intel Itanium big endian (IA64 line)
cli - Microsoft.Net platform
net - Microsoft.Net platform (alias)
i960l - Intel 960 little endian
i960b - Intel 960 big endian (i960 line)
f2mc16l - Fujitsu F2MC-16L
f2mc16lx- Fujitsu F2MC-16LX (Fujitsu F2MC line)
tms32054- TMS320C54xx series
tms32055- TMS320C55xx series
trimedia- Trimedia
78k0 - NEC 78k/0
78k0s - NEC 78k/0s
m740 - Mitsubishi 8-bit
m7700 - Mitsubishi 16-bit
m7750 - Mitsubishi 16-bit (Mitsubishi 16-bit line)
m32r - Mitsubishi 32-bit
m32rx - Mitsubishi 32-bit extended (Mitsubishi 32-bit line)
st9 - STMicroelectronics ST9+
fr - Fujitsu FR family
m7900 - Mitsubishi M7900



Zitat:
Na ich bräuchte Sie wohl per Post (Adresse kann ich auf "Bedarf" ja per persönlicher Mail hinterlegen), solange ich mein 5,25" Laufwerk nicht reaktivieren kann. Aber lass mal, ich schau mal ob ich es nicht doch noch hinkriege, per TeleDisk die Disketten zu schreiben.

Gruss
Peter

OK, dann viel Glück dabei. Übrigens bei eBay wird gerade ein P2000C angeboten, leider auch ohne OS ( Artikelnummer: 230112078840
j.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
023
07.04.2007, 14:52 Uhr
Peter Dassow

Avatar von Peter Dassow


Zitat:
timetube postete

Zitat:
Ähhh... ich lass gerade das Gegenteil:
http://www.datarescue.com/idabase/idadoc/619.htm
"NOTE: For the moment IDA supports only a generic assembler for 80x86 processors."
Ich kann nur den Prozessortyp in IDA Pro 5.0 einstellen ;-(


3. plus-pack

Dir ist schon klar, dass der 80x86 nichts mit einem Z80 zu tun hat oder ?
Ich meine Du wolltest doch CP/M Roms verarbeiten, meintest du cp/m 86 oder wie ist das mit dem 80x86 zu verstehen?

Mein IDA kann die folgenden Prozessoren disassemplieren. Das sollte Deine Pro Version auch können.

8086 - Intel 8086
80286r - Intel 80286 real mode
[...]
m7900 - Mitsubishi M7900



Bitte lese doch mal genauer was ich oben geschrieben hatte.... der PROZESSORTYP hat erst mal nur sekundär was mit dem ASSEMBLERTYP zu tun.
Natürlich meine ich den Z80 (weiterhin), dass der nichts mit 80x86 am Hut hat, war wohl klar ;-)
Die Pro kann ein paar Prozessortypen mehr als die Standard.
Mein Zitat aus der datarescue (=Hersteller IDA) Seite, Link war auch dabei, besagt nicht, dass keine anderen Prozessoren nur Disassemblierung benutzt werden können, sondern nur, dass der Assemblertyp/-hersteller nicht weiter ausgesucht werden kann.

Der Philips P2000C in Ebay hatte ich schon im Auge, aber zwei Geräte des gleichen Typs brauche ich dann doch nicht...

Gruss
Peter
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
024
07.04.2007, 17:49 Uhr
timetube

Avatar von timetube


Zitat:
Bitte lese doch mal genauer was ich oben geschrieben hatte.... der PROZESSORTYP hat erst mal nur sekundär was mit dem ASSEMBLERTYP zu tun.
Natürlich meine ich den Z80 (weiterhin), dass der nichts mit 80x86 am Hut hat, war wohl klar ;-) ...
Die Pro kann ein paar Prozessortypen mehr als die Standard.
Mein Zitat aus der datarescue (=Hersteller IDA) Seite, Link war auch dabei, besagt nicht, dass keine anderen Prozessoren nur Disassemblierung benutzt werden können, sondern nur, dass der Assemblertyp/-hersteller nicht weiter ausgesucht werden kann.... Peter

Bitte lese doch mal genauer was ich oben geschrieben hatte.... der PROZESSORTYP hat erst mal nur sekundär was mit dem ASSEMBLERTYP zu tun. Na dann leben wir wohl in verschiedenen Welten.

Es ging und geht hier im Thread um CP/M und Z80, da kannste kein 80x86 Assembler verwenden. Du kannst einen Cross-Assembler für z80 auf einem 80x86 Host verwenden, aber auch da braucht Du einen, der die z80 Mnemonik versteht. Hier nun zu schreiben die CPU sei sekundär, Hauptsache man hat irgend einen Assembler, das ist hanebüchener Blödsinn.

Es geht hier also nicht darum das Deine Texte nicht richtig gelesen werden, meine Kopfschmerzen rühren er daher, dass ich ihn gelesen habe, jedenfalls wenn ich nun erkennen muss, dass Du außer Stande bist mal wieder einen Schritt zurück zu rudern, wenn Du Dich verrannt hast.

Du räumst ja ein:
"Natürlich meine ich den Z80 (weiterhin), dass der nichts mit 80x86 am Hut hat, war wohl klar ;-) "

Na dann kannst Du doch keinen 80x86 Sourcecode (CPU) verwenden, was soll den das?

Also Du schriebst:
„ Ich habe eigentlich ein Werkzeug gesucht, um das MSX2 CP/M Plus 3.0 zumindest teilweise zu disassemblieren.... Vielleicht probiere ich es lieber mal mit dem Philips P2000C statt mit dem MSX2 Rechner…“

Daraufhin sende ich Dir ein Beispiellisting für ein
> Processor : z80 []
>; Target assembler: Zilog Macro Assembler
Und Du meinst:

„Ich komme damit nicht wirklich zurecht.... in IDA muss man wohl RAM, ROM, und FILE-Grenze eingeben.... (mit vielen Nullen oder Einsen) abbildet. Wie kriege ich mit dem ach so tollen IDA eine schlankere Datei hin, die ich am Besten auch gleich wieder in den M80 stecken kann ??“

OK, Du kannst den IDA nicht intuitiv bedienen, das ist erst einmal nicht schlimm. ABER Du willst eine schlanke Datei für den M80-Assembler, also Z80-Sourcen erzeugen, halten wir das mal fest

Und ich versuche Dir klar zu machen, das IDA für den z80 auch den M80 ausgeben kann…

Und Du konterst:

“Ähhh... ich lass gerade das Gegenteil:
http://www.datarescue.com/idabase/idadoc/619.htm
"NOTE: For the moment IDA supports only a generic assembler for 80x86 processors."
Ich kann nur den Prozessortyp in IDA Pro 5.0 einstellen ;-(„

Also diese Seite sagt nichts anderes als das IDA für die 80x86 nur einen Generic Assembler Listing erstellen kann, nicht aber was er für andere CPUs ausgeben kann.

Dann mache ich Dich darauf aufmerksam, dass Du erst die z80 Einstellen musst und dann erst kannst Du die für diese CPU zuständigen Assembler-source-formate festlegen (auch dem M80), und Du meinst die CPU sei wurst.

Ich gehe mal von dem für Dich vorteilhaftesten aus und unterstelle Dir, dass Du einfach nur lange Weile hast und hier ein wenig Scherzen möchtest. Ich weiß es natürlich besser, möchte aber hier nun nicht gleich Tacheles reden mit welchen wie dir.

Erwarte aber bitte nicht, dass ich weiter auf Dich eingehen werde.

tt.
--
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt." Ein Stein.

Dieser Post wurde am 07.04.2007 um 17:51 Uhr von timetube editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1- [ 2 ]     [ Andere CP/M-Versionen ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek