Нужно по тексту, который выдает IDA, восстановить исходный текст. Если текст компилировать такой как есть, иногда все получается нормально, а иногда нет, Можно ли на примере процедуры, описать переменные и аргументы, их порядок, так как они должны быть в исходном тексте. Код (Text): .text:0040114F ; --------------- S U B R O U T I N E --------------------------------------- .text:0040114F .text:0040114F ; Attributes: bp-based frame .text:0040114F .text:0040114F sub_40114F proc near ; CODE XREF: start+D3p .text:0040114F .text:0040114F var_9 = byte ptr -9 .text:0040114F var_8 = dword ptr -8 .text:0040114F var_4 = dword ptr -4 .text:0040114F arg_0 = dword ptr 8 .text:0040114F arg_4 = dword ptr 0Ch .text:0040114F arg_8 = dword ptr 10h .text:0040114F arg_C = dword ptr 14h .text:0040114F .text:0040114F push ebp .text:00401150 mov ebp, esp .text:00401152 add esp, 0FFFFFFF4h .text:00401155 push ebx .text:00401156 push esi .text:00401157 push edi .text:00401158 mov eax, [ebp+arg_8] .text:0040115B mov [ebp+var_8], eax .text:0040115E add eax, [ebp+arg_C] .text:00401161 mov [ebp+var_4], eax .text:00401164 mov esi, [ebp+arg_8] .text:00401167 mov al, [esi] .text:00401169 mov [ebp+var_9], al .text:0040116C mov ecx, [ebp+arg_4] .text:0040116F mov esi, [ebp+arg_0] .text:00401172 mov edi, [ebp+arg_0] .text:00401175 .text:00401175 loc_401175: ; CODE XREF: sub_40114F+5Bj .text:00401175 mov al, [esi]
Код (Text): proc sub_40114F arg_0,arg_4,arg_8,arg_C locals var_9 db ? var_8 dd ? var_4 dd ? endl ... mov eax, [arg_8] mov [var_8], eax add eax, [arg_C] ... Типа того
mfn Из приведенного тобой фрагмента видим, что скорее всего типы аргументов следующие: BYTE*arg_0; int arg_4; BYTE*arg_8; int arg_C; а типы локальных переменных: BYTE* var_4; BYTE* var_8; BYTE var_9; Код: var_8 = arg_8; var_4 = arg_8 + arg_C; var_9 = *arg_8; ecx = arg_4; //здесь оптимизация - регистровая переменная, можем ее в дальнейшем обозначить c esi = edi = arg_0; //здесь оптимизация - регистровые переменные, можем их в дальнейшем обозначить i, j Дальше видимо loop, поскольку ссылка на loc_401175 снизу. Какая-то процедура, работающая со строками.
Спасибо ответившим. Сразу не написал, что исходник делается в MASM 8. Там это делается немного по-другому. Как это сделать в документации по масму пишут одно, в книгах другое. Кокда все правильно, то IDA и отлачик распознают аргументы и выделяют в тексте 004010BE |. 8D8B 2A304000 |LEA ECX,DWORD PTR DS:[EBX+40302A] 004010C4 |. 6A 0F |PUSH 0F ; /Arg4 = 0000000F 004010C6 |. 51 |PUSH ECX ; |Arg3 004010C7 |. 68 00010000 |PUSH 100 ; |Arg2 = 00000100 004010CC |. 8D85 E0FCFFFF |LEA EAX,DWORD PTR SS:[EBP-320] ; | 004010D2 |. 50 |PUSH EAX ; |Arg1 = 0012FC7C 004010D3 |. E8 77000000 |CALL Keyb.0040114F ; \Keyb.0040114F
mfn Ну, скажи спасибо, что тебе не предложили еще вариантов. Вообще-то по приведенному фрагменту можно с большой долей вероятности сказать, что исходник на С.