Decompiling a *.DLL to assembly for .net in delphi 4
I love my Delphi 4 but at the same time I see the need to talk to windows .net This is a recompiled dll that I found on sourceforge.net/projects/delphinet/ (DelphiNet03.zip) by some nice people that fund the dll from some were. The real answer is to make this dll so that fits into Delphi as true Delphi code, and not a dll clip on. So we can make objects that use dot net in Delphi. Because I’m not an assembly freak, I’m freaking out a little with a wee sweek for help!
1/ How do I link the asm code with the data info at the bottom of this code. Can some one show me which calls to look for to make this link to data. 2/ I need to find the beginning of all the procedures and functions, but I cannot find a ‘RET’ statement. And what line is the beginning statement in this code. 3/ How do I identify were the jump statements go to, put them into Delphi format In this code it looks I can do:-
jle 402890h \\1000:00402854 7e3a
add [eax], al \\1000:00402856 0000
……………………………………………..
or ch, [edi+3eh] \\1000:0040288d 0a6f3e
xrefs first: 1000:00402854 number : 1 \\;
add [eax], al \\1000:00402890 0000
//*********************************************************
jle @@21 \\1000:00402854 7e3a
add [eax], al \\1000:00402856 0000
……………………………………………..
or ch, [edi+3eh] \\1000:0040288d 0a6f3e
xrefs first: 1000:00402854 number : 1 \\;
@@21 add [eax], al \1000:00402890 0000
Is that a correct conversion. I think a xrefs first: 1000:004021d1 number : 1 is the best to follow
4/ I need a good reference on 8086 up assembly code that I can print out and get to learn properly.
I found this asm decomplier of http://www.cronos.cc/ that is so similar to Delphi that it only needs a little more convertion to get it into Delphi asm I think. It’s only taken me 3 hours to get the file into TMemo and to write a few lines to chop the line over in a stream and reload the memo.
?
xrefs first: 1000:004041ae number : 1 \\;
dd 4190h \\1000:00402000 90410000
dd 00h \\1000:00402004 00000000
dec eax \\1000:00402008 48
add [eax], al \\1000:00402009 0000
add [edx], al \\1000:0040200b 0002
add [eax], al \\1000:0040200d 0000
add [eax-2bffffd2h], al \\1000:0040200f 00802e0000d4
adc al, [eax] \\1000:00402015 1200
add [ecx], al \\1000:00402017 0001
add [eax], al \\1000:00402019 0000
add [eax], al \\1000:0040201b 0000
add [eax], al \\1000:0040201d 0000
add [eax], al \\1000:0040201f 0000
add [eax], al \\1000:00402021 0000
add [eax], al \\1000:00402023 0000
add [eax], al \\1000:00402025 0000
add [eax], al \\1000:00402027 0000
add [eax], al \\1000:00402029 0000
add [eax], al \\1000:0040202b 0000
add [eax], al \\1000:0040202d 0000
add [eax], al \\1000:0040202f 0000
add [eax], al \\1000:00402031 0000
add [eax], al \\1000:00402033 0000
add [eax], al \\1000:00402035 0000
add [eax], al \\1000:00402037 0000
add [eax], al \\1000:00402039 0000
add [eax], al \\1000:0040203b 0000
add [eax], al \\1000:0040203d 0000
add [eax], al \\1000:0040203f 0000
add [eax], al \\1000:00402041 0000
add [eax], al \\1000:00402043 0000
add [eax], al \\1000:00402045 0000
add [eax], al \\1000:00402047 0000
add [eax], al \\1000:00402049 0000
add [eax], al \\1000:0040204b 0000
add [eax], al \\1000:0040204d 0000
add [ebx], dl \\1000:0040204f 0013
xor [eax+eax], al \\1000:00402051 300400
or al, [ecx] \\1000:00402054 0a01
add [eax], al \\1000:00402056 0000
add [eax], eax \\1000:00402058 0100
add [ecx], dl \\1000:0040205a 0011
push cs \\1000:0040205c 0e
add al, 50h \\1000:0040205d 0450
mov gs, [ecx+05h] \\1000:0040205f 8e6905
push eax \\1000:00402062 50
mov gs, [ecx+2eh] \\1000:00402063 8e692e
add eax, f938h \\1000:00402066 0538f90000
add [ebx], al \\1000:0040206b 0003
jc 402070h \\1000:0040206d 7201
add [eax], al \\1000:0040206f 0000
jo 40209bh \\1000:00402071 7028
add al, [eax] \\1000:00402073 0200
add [edx], cl \\1000:00402075 000a
sub eax, 36f0408h \\1000:00402077 2d08046f03
add [eax], al \\1000:0040207c 0000
or ch, [ebx] \\1000:0040207e 0a2b
push es \\1000:00402080 06
add al, 6fh \\1000:00402081 046f
add al, 00h \\1000:00402083 0400
add [edx], cl \\1000:00402085 000a
adc eax, [edi] \\1000:00402087 1307
push ss \\1000:00402089 16
adc ecx, [eax] \\1000:0040208a 1308
cmp cl, cl \\1000:0040208c 38c9
add [eax], al \\1000:0040208e 0000
add [ecx], dl \\1000:00402090 0011
pop es \\1000:00402092 07
adc [eax], ecx \\1000:00402093 1108
callf 056f:060a9a08h \\1000:00402095 9a0a066f05
add [eax], al \\1000:0040209a 0000
or cl, [ebx] \\1000:0040209c 0a0b
push es \\1000:0040209e 06
outsd \\1000:0040209f 6f
push es \\1000:004020a0 06
add [eax], al \\1000:004020a1 0000
or al, [ebx] \\1000:004020a3 0a03
sub [edx], al \\1000:004020a5 2802
add [eax], al \\1000:004020a7 0000
or bh, [ecx] \\1000:004020a9 0a39
movsd \\1000:004020ab a5
add [eax], al \\1000:004020ac 0000
add [edi], al \\1000:004020ae 0007
mov gs, [ecx+0eh] \\1000:004020b0 8e690e
add al, 50h \\1000:004020b3 0450
mov gs, [ecx+40h] \\1000:004020b5 8e6940
cwde \\1000:004020b8 98
add [eax], al \\1000:004020b9 0000
add [edi], dl \\1000:004020bb 0017
or al, 16h \\1000:004020bd 0c16
or eax, 9072b2bh \\1000:004020bf 0d2b2b0709
callf 0000:076f9a09h \\1000:004020c4 9a6f070000
or ch, [edi+08h] \\1000:004020c9 0a6f08
add [eax], al \\1000:004020cc 0000
or ch, [eax+ebx] \\1000:004020ce 0a2c18
push cs \\1000:004020d1 0e
add al, 50h \\1000:004020d2 0450
or [edx+d72h], ebx \\1000:004020d4 099a720d0000
jo 402104h \\1000:004020da 7028
or [eax], eax \\1000:004020dc 0900
add [edx], cl \\1000:004020de 000a
add dl, cs:[esi] \\1000:004020e0 2e0216
or al, 08h \\1000:004020e3 0c08
sub eax, 90c2b02h \\1000:004020e5 2d022b0c09
pop ss \\1000:004020ea 17
pop eax \\1000:004020eb 58
or eax, 50040e09h \\1000:004020ec 0d090e0450
mov gs, [ecx+32h] \\1000:004020f1 8e6932
int 08h \\1000:004020f4 cd08
sub al, 5ch \\1000:004020f6 2c5c
push ss \\1000:004020f8 16
adc eax, [ebx+ebp] \\1000:004020f9 13042b
dec esi \\1000:004020fc 4e
push cs \\1000:004020fd 0e
add al, 50h \\1000:004020fe 0450
adc [edx+ebx*4], eax \\1000:00402100 11049a
jc 402112h \\1000:00402103 720d
add [eax], al \\1000:00402105 0000
jo 402131h \\1000:00402107 7028
or [eax], eax \\1000:00402109 0900
add [edx], cl \\1000:0040210b 000a
xor esi, [esi] \\1000:0040210d 3336
pop es \\1000:0040210f 07
adc [edx+ebx*4], eax \\1000:00402110 11049a
outsd \\1000:00402113 6f
pop es \\1000:00402114 07
add [eax], al \\1000:00402115 0000
or ch, [edi+0ah] \\1000:00402117 0a6f0a
add [eax], al \\1000:0040211a 0000
or dl, [ebx] \\1000:0040211c 0a13
push es \\1000:0040211e 06
add eax, 9a041150h \\1000:0040211f 055011049a
sub [ebx], cl \\1000:00402124 280b
add [eax], al \\1000:00402126 0000
or dl, [edx] \\1000:00402128 0a12
push es \\1000:0040212a 06
adc al, [c28h] \\1000:0040212b 1205280c0000
xrefs first: 1000:00402107 number : 1 \\;
or ch, [edx+eax] \\1000:00402131 0a2c02
sub ebx, [esi] \\1000:00402134 2b1e
push cs \\1000:00402136 0e
add al, 50h \\1000:00402137 0450
adc [edi+eax], eax \\1000:00402139 110407
adc [edx+ebx*4], eax \\1000:0040213c 11049a
outsd \\1000:0040213f 6f
pop es \\1000:00402140 07
add [eax], al \\1000:00402141 0000
or ah, [edx+58170411h] \\1000:00402143 0aa211041758
adc eax, [ecx+edx] \\1000:00402149 130411
add al, 0eh \\1000:0040214c 040e
add al, 50h \\1000:0040214e 0450
mov gs, [ecx+32h] \\1000:00402150 8e6932
test eax, 58170811h \\1000:00402153 a911081758
adc ecx, [eax] \\1000:00402158 1308
adc [eax], ecx \\1000:0040215a 1108
adc [edi], eax \\1000:0040215c 1107
mov gs, [ecx+3fh] \\1000:0040215e 8e693f
sub al, ffh \\1000:00402161 2cff
db ff \\1000:00402163 ff
jmp [edx] \\1000:00402164 ff2a
add [eax], al \\1000:00402166 0000
adc esi, [eax] \\1000:00402168 1330
add eax, 8100h \\1000:0040216a 0500810000
add [edx], al \\1000:0040216f 0002
add [eax], al \\1000:00402171 0000
adc [edx+esi*2], eax \\1000:00402173 110472
xor eax, [eax] \\1000:00402176 3300
add [eax+28h], dh \\1000:00402178 007028
add al, [eax] \\1000:0040217b 0200
add [edx], cl \\1000:0040217d 000a
sub al, 09h \\1000:0040217f 2c09
add ebp, [eax] \\1000:00402181 0328
or eax, a0a0000h \\1000:00402183 0d00000a0a
sub eax, [edi] \\1000:00402188 2b07
add al, 28h \\1000:0040218a 0428
push cs \\1000:0040218c 0e
add [eax], al \\1000:0040218d 0000
or cl, [edx] \\1000:0040218f 0a0a
push es \\1000:00402191 06
add eax, f6f1717h \\1000:00402192 0517176f0f
add [eax], al \\1000:00402197 0000
or cl, [ebx] \\1000:00402199 0a0b
push ss \\1000:0040219b 16
lea eax, [edx] \\1000:0040219c 8d02
add [eax], al \\1000:0040219e 0000
add [esi+ecx], ecx \\1000:004021a0 010c0e
add al, 2ch \\1000:004021a3 042c
push cs \\1000:004021a5 260e
add al, 8eh \\1000:004021a7 048e
c160d imul edi, [eax+28dh], d160c01h \\1000:004021a9 69b88d020000010c
sub edx, [eax] \\1000:004021b3 2b10
or [ecx], cl \\1000:004021b5 0809
push cs \\1000:004021b7 0e
add al, 09h \\1000:004021b8 0409
callf 0000:106f9a09h \\1000:004021ba 9a6f100000
or ah, [edx+d581709h] \\1000:004021bf 0aa20917580d
or [esi], ecx \\1000:004021c5 090e
add al, 8eh \\1000:004021c7 048e
imul esi, [edx], 17202e9h \\1000:004021c9 6932e9027201
add [eax], al \\1000:004021cf 0000
jo 4021dah \\1000:004021d1 7007
db 0f \\1000:004021d3 0f
add al, 12h \\1000:004021d4 0412
add ch, [eax] \\1000:004021d6 0228
add [eax], eax \\1000:004021d8 0100
xrefs first: 1000:004021d1 number : 1 \\;
add [esi], al \\1000:004021da 0006
pop es \\1000:004021dc 07
or [edi+11h], ch \\1000:004021dd 086f11
add [eax], al \\1000:004021e0 0000
or dl, [ebx] \\1000:004021e2 0a13
add al, 11h \\1000:004021e4 0411
add al, 0eh \\1000:004021e6 040e
add al, 6fh \\1000:004021e8 046f
adc al, [eax] \\1000:004021ea 1200
add [edx], cl \\1000:004021ec 000a
adc eax, [511002bh] \\1000:004021ee 13052b001105
sub al, [eax] \\1000:004021f4 2a00
add [eax], al \\1000:004021f6 0000
adc esi, [eax] \\1000:004021f8 1330
add eax, 4e00h \\1000:004021fa 05004e0000
add [ebx], al \\1000:004021ff 0003
add [eax], al \\1000:00402201 0000
adc [ebx], eax \\1000:00402203 1103
outsd \\1000:00402205 6f
adc [eax], al \\1000:00402206 1000
add [edx], cl \\1000:00402208 000a
or al, [8db8698eh] \\1000:0040220a 0a058e69b88d
add al, [eax] \\1000:00402210 0200
add [ecx], al \\1000:00402212 0001
or edx, [esi] \\1000:00402214 0b16
or al, 2bh \\1000:00402216 0c2b
db 0f \\1000:00402218 0f
pop es \\1000:00402219 07
or [106f9a08h], al \\1000:0040221a 0805089a6f10
add [eax], al \\1000:00402220 0000
or ah, [edx+c581708h] \\1000:00402222 0aa20817580c
or [eb32698eh], al \\1000:00402228 08058e6932eb
add al, [esi+eax] \\1000:0040222e 020406
lsl edx, [edx] \\1000:00402231 0f0312
add [eax], ebp \\1000:00402234 0128
add [eax], eax \\1000:00402236 0100
add [esi], al \\1000:00402238 0006
push es \\1000:0040223a 06
add al, 07h \\1000:0040223b 0407
outsd \\1000:0040223d 6f
adc eax, [eax] \\1000:0040223e 1300
add [edx], cl \\1000:00402240 000a
or eax, 6f050309h \\1000:00402242 0d0903056f
adc al, 00h \\1000:00402247 1400
add [edx], cl \\1000:00402249 000a
adc eax, [ebx+ebp] \\1000:0040224b 13042b
add [ecx], dl \\1000:0040224e 0011
add al, 2ah \\1000:00402250 042a
add [eax], al \\1000:00402252 0000
adc esi, [eax] \\1000:00402254 1330
add eax, 7600h \\1000:00402256 0500760000
add [eax+eax], al \\1000:0040225b 000400
add [ecx], dl \\1000:0040225e 0011
add al, 72h \\1000:00402260 0472
xor eax, [eax] \\1000:00402262 3300
add [eax+28h], dh \\1000:00402264 007028
add al, [eax] \\1000:00402267 0200 开发者_开发问答
add [edx], cl \\1000:00402269 000a
sub al, 09h \\1000:0040226b 2c09
add ebp, [eax] \\1000:0040226d 0328
or eax, a0a0000h \\1000:0040226f 0d00000a0a
sub eax, [edi] \\1000:00402274 2b07
add al, 28h \\1000:00402276 0428
push cs \\1000:00402278 0e
add [eax], al \\1000:00402279 0000
or cl, [edx] \\1000:0040227b 0a0a
push es \\1000:0040227d 06
add eax, f6f1717h \\1000:0040227e 0517176f0f
add [eax], al \\1000:00402283 0000
or cl, [ebx] \\1000:00402285 0a0b
push cs \\1000:00402287 0e
add eax, 8db8698eh \\1000:00402288 058e69b88d
add al, [eax] \\1000:0040228d 0200
add [ecx], al \\1000:0040228f 0001
or al, 16h \\1000:00402291 0c16
or eax, 908102bh \\1000:00402293 0d2b100809
push cs \\1000:00402298 0e
add eax, 106f9a09h \\1000:00402299 05099a6f10
add [eax], al \\1000:0040229e 0000
or ah, [edx+d581709h] \\1000:004022a0 0aa20917580d
or [esi], ecx \\1000:004022a6 090e
add eax, e932698eh \\1000:004022a8 058e6932e9
add cl, [esi] \\1000:004022ad 020e
add al, 07h \\1000:004022af 0407
db 0f \\1000:004022b1 0f
add eax, 1280212h \\1000:004022b2 0512022801
add [eax], al \\1000:004022b7 0000
push es \\1000:004022b9 06
pop es \\1000:004022ba 07
push cs \\1000:004022bb 0e
add al, 08h \\1000:004022bc 0408
outsd \\1000:004022be 6f
adc eax, [eax] \\1000:004022bf 1300
add [edx], cl \\1000:004022c1 000a
adc eax, [ecx+edx] \\1000:004022c3 130411
add al, 14h \\1000:004022c6 0414
push cs \\1000:004022c8 0e
add eax, 146fh \\1000:004022c9 056f140000
or dl, [ebx] \\1000:004022ce 0a13
add eax, 511002bh \\1000:004022d0 052b001105
sub al, [eax] \\1000:004022d5 2a00
add [ebx], dl \\1000:004022d7 0013
xor [eax+eax], al \\1000:004022d9 300400
jbe 4022deh \\1000:004022dc 7600
xrefs first: 1000:004022dc number : 1 \\;
add fs:[esi+45h], cl \\1000:004034fc 64004e45
push esp \\1000:00403500 54
dec ecx \\1000:00403501 49
xrefs first: 1000:004034b2 number : 1 \\;
outsb \\1000:00403502 6e
jbe 403574h \\1000:00403503 766f
imul esp, [ebp+43h], 6ch \\1000:00403505 6b65436c
popad \\1000:00403509 61
jnc 40357fh \\1000:0040350a 7373
dec ebp \\1000:0040350c 4d
jz 403578h \\1000:0040350d 657468
outsd \\1000:00403510 6f
add fs:[esi+45h], cl \\1000:00403511 64004e45
push esp \\1000:00403515 54
push ebx \\1000:00403516 53
jz 40355fh \\1000:00403517 657445
outsb \\1000:0040351a 6e
jnz 40358ah \\1000:0040351b 756d
push esi \\1000:0040351d 56
xrefs first: 1000:004034b7 number : 1 \\;
popad \\1000:0040351e 61
insb \\1000:0040351f 6c
jnz 403587h \\1000:00403520 7565
add [esi+45h], cl \\1000:00403522 004e45
push esp \\1000:00403525 54
inc edi \\1000:00403526 47
db 65 ;'e' \\1000:00403527 65
xrefs first: 1000:004034be number : 1 \\;
db 74 ;'t' \\1000:00403528 74
db 50 ;'p' \\1000:00403529 50
db 72 ;'r' \\1000:0040352a 72
db 6f ;'o' \\1000:0040352b 6f
db 70 ;'p' \\1000:0040352c 70
db 65 ;'e' \\1000:0040352d 65
db 72 ;'r' \\1000:0040352e 72
db 74 ;'t' \\1000:0040352f 74
db 79 ;'y' \\1000:00403530 79
db 00 \\1000:00403531 00
db 4e ;'n' \\1000:00403532 4e
db 45 ;'e' \\1000:00403533 45
db 54 ;'t' \\1000:00403534 54
db 47 ;'g' \\1000:00403535 47
db 65 ;'e' \\1000:00403536 65
db 74 ;'t' \\1000:00403537 74
db 46 ;'f' \\1000:00403538 46
db 69 ;'i' \\1000:00403539 69
db 65 ;'e' \\1000:0040353a 65
db 6c ;'l' \\1000:0040353b 6c
db 64 ;'d' \\1000:0040353c 64
db 00 \\1000:0040353d 00
could not fit the rest in because of Stack overflow limitions
First, you have decompiled an IL code .NET dll to raw x86 32bit assembly. I mean, the bytes inside the .dll are NOT for a 32bit x86, are for the .NET's VM.
Second, converting that dll it's a totally pointless faraonic task, no one is going to do that. More, let's say you convert the dll, who is going to convert also all the dependencies of that .NET dll? It lacks of sense.
Third, check out the CrossTalk project. It might help you.
Four, it's time to upgrade your Delphi 4 or to switch to FreePascal, there are a LOT of things very very cool you are missing.
You know, Win32 DLLs can be called by managed .NET code. It's called P/Invoke. Use it.
精彩评论