Analyse d'une routine / demande d'aide aux spécialistes

esainturlo Messages postés 1 Date d'inscription jeudi 18 mars 2010 Statut Membre Dernière intervention 18 mars 2010 - 18 mars 2010 à 17:20
 Profil bloqué - 19 mars 2010 à 21:39
Bonjour,
Quelqu'un peut-il m'aider à traduire en termes mathématiques (ou organigramme ou algorythme) le rôle de cette routine qui, je le suppose, transforme un nombre de 9 chiffres en un autre nombre de 8 chiffres, ou le contraire.
Merci d'avance.

Private sub Unknown_416D80
loc_00416DA5: var_08 = &H401A70
loc_00416E44: call MSVBVM60.DLL.__vbaStrCopy(edi, esi, ebx, fs:[00h], MSVBVM60.DLL.__vbaExceptHandler, ebp)
loc_00416E55: call MSVBVM60.DLL.__vbaAryConstruct2(var_80, 00405F24h, 00000002h)
loc_00416E68: call MSVBVM60.DLL.__vbaAryConstruct2(var_0000009C, 00405F48h, 00000002h)
loc_00416E7B: call MSVBVM60.DLL.__vbaAryConstruct2(var_000000C8, 00405F48h, 00000002h)
loc_00416E8A: call MSVBVM60.DLL.__vbaVarVargNofree
loc_00416E98: call MSVBVM60.DLL.__vbaVarCopy
loc_00416EAC: var_00000128 = &H405AA8
loc_00416EB6: var_00000130 = &H8008
loc_00416EC0: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00416EC9: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00416ED7: call MSVBVM60.DLL.__vbaStrCopy
loc_004170B7: GoTo loc_00418915
loc_004170BC: End If
loc_004170CA: var_00000128 = &H405ABC
loc_004170D4: var_00000130 = &H8008
loc_004170DE: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_004170E7: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_004170F5: call MSVBVM60.DLL.__vbaStrCopy
loc_00417318: GoTo loc_00418915
loc_0041731D: End If
loc_0041732B: var_00000128 = &H405AC4
loc_00417335: var_00000130 = &H8008
loc_0041733F: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417348: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417356: call MSVBVM60.DLL.__vbaStrCopy
loc_00417579: GoTo loc_00418915
loc_0041757E: End If
loc_0041758C: var_00000128 = &H405ACC
loc_00417596: var_00000130 = &H8008
loc_004175A0: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_004175A9: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_004175B7: call MSVBVM60.DLL.__vbaStrCopy
loc_004177E0: GoTo loc_00418915
loc_004177E5: End If
loc_004177F3: var_00000128 = &H405AE0
loc_004177FD: var_00000130 = &H8008
loc_00417807: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417810: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_0041781E: call MSVBVM60.DLL.__vbaStrCopy
loc_00417A3A: GoTo loc_00418915
loc_00417A3F: End If
loc_00417A4D: var_00000128 = &H405AE8
loc_00417A57: var_00000130 = &H8008
loc_00417A61: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417A6A: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417A78: call MSVBVM60.DLL.__vbaStrCopy
loc_00417C9E: GoTo loc_00418915
loc_00417CA3: End If
loc_00417CB1: var_00000128 = &H405DE0
loc_00417CBB: var_00000130 = &H8008
loc_00417CC5: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417CCE: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417CD5: GoTo loc_0041890B
loc_00417CDA: End If
loc_00417CE8: var_00000128 = &H405E04
loc_00417CF2: var_00000130 = &H8008
loc_00417CFC: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417D05: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417D0C: GoTo loc_0041890B
loc_00417D11: End If
loc_00417D1F: var_00000128 = &H405E28
loc_00417D29: var_00000130 = &H8008
loc_00417D33: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417D3C: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417D43: GoTo loc_0041890B
loc_00417D48: End If
loc_00417D56: var_00000128 = &H405E4C
loc_00417D60: var_00000130 = &H8008
loc_00417D6A: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417D73: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") = 0 Then
loc_00417D87: var_00000128 = &H405AF0
loc_00417D91: var_00000130 = &H8008
loc_00417D9B: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00417DA4: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00417DB2: call MSVBVM60.DLL.__vbaStrCopy
loc_00417DBA: Right$("", 00000001h)
loc_00417DC8: call MSVBVM60.DLL.__vbaStrMove
loc_00417DCF: MSVBVM60.DLL.__vbaStrMove = CLng(%x2)
loc_00417DD7: and esi, 80000001h
loc_00417DDD: If Not Asm.s_flag Then
loc_00417DDF: dec esi
loc_00417DE0: or esi, FFFFFFFEh
loc_00417DE3: inc esi
loc_00417DE4: End If
loc_00417DE4: neg esi
loc_00417DE6: sbb esi, esi
loc_00417DEE: inc esi
loc_00417DEF: neg esi
loc_00417DF1: call MSVBVM60.DLL.__vbaFreeStr
loc_00417DFA: If MSVBVM60.DLL.__vbaStrMove <> edi Then
loc_00418022: GoTo loc_00418915
loc_00418027: End If
loc_00418248: GoTo loc_00418915
loc_0041824D: End If
loc_0041825B: var_00000128 = &H405AF8
loc_00418265: var_00000130 = &H8008
loc_0041826F: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_00418278: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00418286: call MSVBVM60.DLL.__vbaStrCopy
loc_0041828E: Right$("", 00000001h)
loc_0041829C: call MSVBVM60.DLL.__vbaStrMove
loc_004182A3: MSVBVM60.DLL.__vbaStrMove = CLng(%x2)
loc_004182AB: and esi, 80000001h
loc_004182B1: If Not Asm.s_flag Then
loc_004182B3: dec esi
loc_004182B4: or esi, FFFFFFFEh
loc_004182B7: inc esi
loc_004182B8: End If
loc_004182B8: neg esi
loc_004182BA: sbb esi, esi
loc_004182C2: inc esi
loc_004182C3: neg esi
loc_004182C5: call MSVBVM60.DLL.__vbaFreeStr
loc_004182CE: If MSVBVM60.DLL.__vbaStrMove <> edi Then
loc_004184F7: GoTo loc_00418915
loc_004184FC: End If
loc_0041871D: GoTo loc_00418915
loc_00418722: End If
loc_00418730: var_00000128 = &H405450
loc_0041873A: var_00000130 = &H8008
loc_00418744: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_0041874D: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") = 0 Then
loc_00418761: var_00000128 = &H405E54
loc_0041876B: var_00000130 = &H8008
loc_00418775: call MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "")
loc_0041877E: If MSVBVM60.DLL.__vbaVarTstEq(var_00000130, "") <> 0 Then
loc_00418791: var_000000E0 = CreateObject("Scripting.FileSystemObject", edi)
loc_004187A8: call MSVBVM60.DLL.__vbaVarSetVar("", var_000000E0)
loc_004187B4: var_00000130 = 8
loc_004187C9: var_00000128 = "c:"
loc_004187EE: call MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "GetDrive", 00000001h)
loc_004187FF: call MSVBVM60.DLL.__vbaVarSetVar("", MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "GetDrive", 00000001h))
loc_00418811: var_00000128 = 1
loc_00418828: var_00000130 = 2
loc_0041883D: GetSetting("TurboSelf","Carte","CCN",%x4)
loc_00418864: var_00000110 = &H8008
loc_0041886E: var_00000138 = 2
loc_00418874: var_00000140 = 2
loc_0041887A: call MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "SerialNumber", edi, var_00000110)
loc_00418892: call MSVBVM60.DLL.__vbaVarDiv("", var_00000140, MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "SerialNumber", edi, var_00000110))
loc_004188A0: call MSVBVM60.DLL.__vbaVarInt("", MSVBVM60.DLL.__vbaVarDiv("", var_00000140, MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "SerialNumber", edi, var_00000110)))
loc_004188A7: call MSVBVM60.DLL.__vbaVarTstNe(MSVBVM60.DLL.__vbaVarInt("", MSVBVM60.DLL.__vbaVarDiv("", var_00000140, MSVBVM60.DLL.__vbaVarLateMemCallLd(var_000000E0, "", "SerialNumber", edi, var_00000110))))
loc_004188CB: If 00401178h <> edi Then
loc_004188CD: var_00000128 = "00000000"
loc_004188E0: var_00000130 = 8
loc_004188EA: call MSVBVM60.DLL.__vbaVarCopy
loc_004188F6: GoTo loc_00418E2E
loc_004188FB: End If
loc_004188FE: var_00000128 = ""
loc_00418904: GoTo loc_4188D7
loc_00418906: End If
loc_00418906: End If
loc_0041890B: 'Referenced from 00417CD5
loc_0041890E: call MSVBVM60.DLL.__vbaVarSetVar(00418EE0h)
loc_00418910: End If
loc_00418915: 'Referenced from 004170B7
loc_0041893C: var_00000128 = 1
loc_00418946: var_00000130 = 2
loc_0041894C: var_00000138 = 7
loc_00418968: For var_24 = 2 To "" Step 2
loc_00418976: If "" <> edi Then
loc_00418986: var_000000F0 = 2
loc_0041898C: var_00000130 = 2
loc_00418995: var_000000E8 = 1
loc_0041899C: var_00000128 = 1
loc_004189A2: var_24 = CLng("")
loc_004189A6: var_00000160 = 1
loc_004189AC: If 00000001h >= 00000009h Then
loc_004189AE: call MSVBVM60.DLL.__vbaGenerateBoundsError("", 2, 2, var_00000130)
loc_004189B4: End If
loc_004189CD: var_000000E0 = var_24 & var_00000130
loc_004189DB: Mid$("", CLng(var_000000F0), %x3)
loc_004189E9: call MSVBVM60.DLL.__vbaStrMove
loc_004189F0: MSVBVM60.DLL.__vbaStrMove = Val(%x2)
loc_004189F6: call MSVBVM60.DLL.__vbaFpI2
loc_00418A12: call MSVBVM60.DLL.__vbaFreeStr
loc_00418A42: If ("" = 00405574h) <> 0 Then
loc_00418A4B: var_000000D8 = 1
loc_00418A56: var_000000E0 = 2
loc_00418A60: var_24 = CLng(%x2)
loc_00418A64: var_00000164 = var_24
loc_00418A6A: If var_24 >= 00000009h Then
loc_00418A6C: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418A72: End If
loc_00418A76: var_24 = CLng(%x2)
loc_00418A80: If MSVBVM60.DLL.__vbaGenerateBoundsError >= 00000009h Then
loc_00418A82: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418A88: End If
loc_00418AA2: dx = dx + 0001h
loc_00418AA6: If Err.Number <> 0 Then GoTo loc_00418F0F
loc_00418AAC: movsx eax, dx
loc_00418AB1: Mid$("", var_000000BC, var_000000E0)
loc_00418ABF: call MSVBVM60.DLL.__vbaStrMove
loc_00418AC6: MSVBVM60.DLL.__vbaStrMove = Val(%x2)
loc_00418ACC: call MSVBVM60.DLL.__vbaFpI2
loc_00418AE8: call MSVBVM60.DLL.__vbaFreeStr
loc_00418AF4: call MSVBVM60.DLL.__vbaFreeVar
loc_00418AFA: End If
loc_00418B0C: Next var_24
loc_00418B12: GoTo loc_00418974
loc_00418B17: End If
loc_00418B55: var_00000128 = 1
loc_00418B5F: var_00000138 = 7
loc_00418B6F: For var_24 = "" To 7 Step 1
loc_00418B77: jz 004188F0h
loc_00418B81: var_24 = CLng("")
loc_00418B85: var_00000160 = ""
loc_00418B8B: If "" >= 00000009h Then
loc_00418B8D: call MSVBVM60.DLL.__vbaGenerateBoundsError("", 2, 2, 2, "")
loc_00418B99: End If
loc_00418BE1: var_00000128 = 1
loc_00418BEB: var_00000138 = 7
loc_00418BFB: For var_44 = "" To 7 Step 1
loc_00418C03: If "" <> edi Then
loc_00418C0D: var_24 = CLng("")
loc_00418C17: var_00000164 = ""
loc_00418C1D: If "" >= 00000009h Then
loc_00418C1F: call MSVBVM60.DLL.__vbaGenerateBoundsError("", 2, 2, 2)
loc_00418C21: End If
loc_00418C25: var_44 = CLng(%x2)
loc_00418C29: var_00000168 = var_44
loc_00418C2F: If var_44 >= 00000009h Then
loc_00418C31: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418C33: End If
loc_00418C37: var_24 = CLng(%x2)
loc_00418C41: If MSVBVM60.DLL.__vbaGenerateBoundsError >= 00000009h Then
loc_00418C43: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418C45: End If
loc_00418C49: var_44 = CLng(%x2)
loc_00418C4F: If MSVBVM60.DLL.__vbaGenerateBoundsError >= 00000009h Then
loc_00418C51: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418C57: End If
loc_00418C5B: var_24 = CLng(%x2)
loc_00418C61: var_00000160 = var_24
loc_00418C67: If var_24 >= 00000009h Then
loc_00418C69: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418C75: End If
loc_00418C81: MSVBVM60.DLL.__vbaGenerateBoundsError = MSVBVM60.DLL.__vbaGenerateBoundsError + edx+edi*8
loc_00418C93: imul ax, [edx+edi*2]
loc_00418C98: If Err.Number <> 0 Then GoTo loc_00418F0F
loc_00418CA4: idiv di
loc_00418CB3: dx = dx + eax+edi*2
loc_00418CB7: If Err.Number <> 0 Then GoTo loc_00418F0F
loc_00418CCB: If CLng(%x2) >= 00000009h Then
loc_00418CCD: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418CD3: End If
loc_00418CD7: var_24 = CLng(%x2)
loc_00418CE1: If MSVBVM60.DLL.__vbaGenerateBoundsError >= 00000009h Then
loc_00418CE3: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418CE9: End If
loc_00418CF9: idiv di
loc_00418D18: Next var_44
loc_00418D20: GoTo loc_00418C01
loc_00418D25: End If
loc_00418D29: var_24 = CLng("")
loc_00418D33: If Next var_44 >= 00000009h Then
loc_00418D35: call MSVBVM60.DLL.__vbaGenerateBoundsError
loc_00418D41: End If
loc_00418D4E: var_00000130 = &H4002
loc_00418D61: var_00000130 = Chr(%x2)
loc_00418D6F: call MSVBVM60.DLL.__vbaStrMove
loc_00418D76: MSVBVM60.DLL.__vbaStrMove = LTrim$(%x2)
loc_00418D9E: var_000000F0 = "" & 8
loc_00418DA9: call MSVBVM60.DLL.__vbaVarMove
loc_00418DB5: call MSVBVM60.DLL.__vbaFreeStr
loc_00418DC1: call MSVBVM60.DLL.__vbaFreeVar
loc_00418DD9: Next var_24
loc_00418DDF: GoTo loc_00418B75
loc_00418DE8: If byte ptr var_04 <> 0 Then
loc_00418DED: call MSVBVM60.DLL.__vbaFreeVar("")
loc_00418DF3: End If
loc_00418DF9: call MSVBVM60.DLL.__vbaFreeStr
loc_00418E2D: ret
loc_00418E2E: 'Referenced from 004188F6
loc_00418E73: call MSVBVM60.DLL.__vbaFreeVar
loc_00418E78: call MSVBVM60.DLL.__vbaFreeVar
loc_00418E83: call MSVBVM60.DLL.__vbaFreeStr
loc_00418E88: call MSVBVM60.DLL.__vbaFreeVar
loc_00418E8D: call MSVBVM60.DLL.__vbaFreeStr
loc_00418EA7: call MSVBVM60.DLL.__vbaAryDestruct(00000000h, var_80)
loc_00418EBE: call MSVBVM60.DLL.__vbaAryDestruct(00000000h, var_0000009C)
loc_00418EC6: call MSVBVM60.DLL.__vbaFreeVar
loc_00418EDD: call MSVBVM60.DLL.__vbaAryDestruct(00000000h, var_000000C8)
loc_00418EDF: ret
loc_00418F0C: retn 000Ch
loc_00418F0F: 'Referenced from 0418AA6
loc_00418F0F: call MSVBVM60.DLL.__vbaErrorOverflow
End Sub

1 réponse

Profil bloqué
19 mars 2010 à 21:39
Salut
Cette routine est du langage assembleur de "haut niveau". J'entends par là le fait qu'un programme en langage évolué (Basic,Delphi, etc....) que l'on désassemble produira un code de ce type avec de nombreux appels de sous-programmes à des sous-routines comprises dans une DLL utilisée par ce langage : ici la DLL est MSVBVM60.DLL (les instructions Call sont des appels de spous-programmes en langage assembleur.
quant à t'en donner ou à trouver l'organigramme ou l'algorithme cela me parait bien impossible car nous ne connaissons nullement les diverses fonctions ou sous-programmes contenus dans la DLL MSVBVM60.DLL
Ce n'est que mon point de vue mais ayant pratiqué l'assembleur du temps du DOS 6.22 je ne dois pas me tromper de beaucoup.
A+ et bonne prog quant même


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Rejoignez-nous