Ребят, такая проблема. Ломаю кракми, алгоритм не сложный. Долго описывать не буду - тема не про то. Имею серийник, хочу забить этот серийник в текстовое поле. Т.е. сделать селф-кейген. Вопрос такой: какая функция из msvbvm60 задает значение текстового поля? Какие у нее параметры? __HResultCheckObject, насколько я понял, берет значение. Пробовал сам писать простое приложение, которое тупо присваивает значение полю. Но в дизассемблированном листинге не понятно, как он осуществляет присвоение. Вот весь листинг. На бэйсике: Sub Button1_Click() Text1.Text="some text" End Sub Вот листинг из Олли: 00401AE0 > 55 PUSH EBP 00401AE1 . 8BEC MOV EBP,ESP 00401AE3 . 83EC 0C SUB ESP,0C 00401AE6 . 68 96104000 PUSH <JMP.&MSVBVM60.__vbaExceptHandler> ; SE handler installation 00401AEB . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 00401AF1 . 50 PUSH EAX 00401AF2 . 64:8925 000000>MOV DWORD PTR FS:[0],ESP 00401AF9 . 83EC 14 SUB ESP,14 00401AFC . 53 PUSH EBX 00401AFD . 56 PUSH ESI 00401AFE . 57 PUSH EDI 00401AFF . 8965 F4 MOV DWORD PTR SS:[EBP-C],ESP 00401B02 . C745 F8 801040>MOV DWORD PTR SS:[EBP-8],Project1.004010> 00401B09 . 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8] 00401B0C . 8BC6 MOV EAX,ESI 00401B0E . 83E0 01 AND EAX,1 00401B11 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00401B14 . 83E6 FE AND ESI,FFFFFFFE 00401B17 . 56 PUSH ESI 00401B18 . 8975 08 MOV DWORD PTR SS:[EBP+8],ESI 00401B1B . 8B0E MOV ECX,DWORD PTR DS:[ESI] 00401B1D . FF51 04 CALL DWORD PTR DS:[ECX+4] 00401B20 . 8B16 MOV EDX,DWORD PTR DS:[ESI] 00401B22 . 33FF XOR EDI,EDI 00401B24 . 56 PUSH ESI 00401B25 . 897D E8 MOV DWORD PTR SS:[EBP-18],EDI 00401B28 . FF92 FC020000 CALL DWORD PTR DS:[EDX+2FC] 00401B2E . 50 PUSH EAX 00401B2F . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] 00401B32 . 50 PUSH EAX 00401B33 . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>; MSVBVM60.__vbaObjSet 00401B39 . 8BF0 MOV ESI,EAX 00401B3B . 68 20154000 PUSH Project1.00401520 ; UNICODE "some text" 00401B40 . 56 PUSH ESI 00401B41 . 8B0E MOV ECX,DWORD PTR DS:[ESI] 00401B43 . FF91 A4000000 CALL DWORD PTR DS:[ECX+A4] ;скорее всего это и есть функция присваивания?????? 00401B49 . 3BC7 CMP EAX,EDI 00401B4B . DBE2 FCLEX 00401B4D . 7D 12 JGE SHORT Project1.00401B61 00401B4F . 68 A4000000 PUSH 0A4 00401B54 . 68 34154000 PUSH Project1.00401534 00401B59 . 56 PUSH ESI 00401B5A . 50 PUSH EAX 00401B5B . FF15 10104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj 00401B61 > 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18] 00401B64 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj 00401B6A . 897D FC MOV DWORD PTR SS:[EBP-4],EDI 00401B6D . 68 7F1B4000 PUSH Project1.00401B7F 00401B72 . EB 0A JMP SHORT Project1.00401B7E 00401B74 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18] 00401B77 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj 00401B7D . C3 RETN 00401B7E > C3 RETN ; RET used as a jump to 00401B7F 00401B7F > 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 00401B82 . 50 PUSH EAX 00401B83 . 8B10 MOV EDX,DWORD PTR DS:[EAX] 00401B85 . FF52 08 CALL DWORD PTR DS:[EDX+8] 00401B88 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00401B8B . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14] 00401B8E . 5F POP EDI 00401B8F . 5E POP ESI 00401B90 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX 00401B97 . 5B POP EBX 00401B98 . 8BE5 MOV ESP,EBP 00401B9A . 5D POP EBP 00401B9B . C2 0400 RETN 4 Может кто может объяснить? Очень интересно забабахать селф-кейген. Заранее спасибо. ЗЫ: Не люблю бейсик
Код (Text): 00401B33 . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>; MSVBVM60.__vbaObjSet 00401B39 . 8BF0 MOV ESI,EAX 00401B3B . 68 20154000 PUSH Project1.00401520 ; UNICODE "some text" 00401B40 . 56 PUSH ESI 00401B41 . 8B0E MOV ECX,DWORD PTR DS:[ESI] 00401B43 . FF91 A4000000 CALL DWORD PTR DS:[ECX+A4] ;скорее всего это и есть функция присваивания?????? Похоже, как будто vbaObjSet возвращает адрес vTable для объекта текстового поля, затем в он кладется в стек (указатель this) вместе с параметром, после чего вызывается элемент vTable по смещению A4. Достаточно помнить, что VB транслируется в Си++ и компилируется примерно так же.