http://www.lrdev.com/lr/x86/samp1.html
x86 assembly dump sample
on a 32 bit x86 (i386) assembly code sample
little endian data model, cisc instruction set, code/data not necessarily aligned
information and source on this sqfigb.exe dump sample can be found at sqfig.html
general notes
most source code related information (source code file names, number of source code files, etc) and symbol information (global and local function names, etc) has been stripped on this sample [that information is not so much of interest for our current considerations; sources with that information can however be found here]
as output from an optimizing c compiler, stack frames (pointed to by register ebp) are mostly omitted and stack accesses are somewhat minimized in favor of register accesses
standard [c] library is linked dynamically, i.e. this dump does not contain such code [however a little startup code is part of this sample]
optimizations observed
shorter bytecodes are often used to use the code cache more efficiently (and save space in the executable images); samples are xor eax,eax [clear register] instead of e.g. mov eax,0 and or eax,0FFh instead of mov eax,-1
pseudo three operands opcodes like lea ecx,dword ptr [esi+1] [short for add ecx,esi,1] are e.g. used to reduce the number of opcodes; an even a bit more complex statement is lea ecx,dword ptr [esp+edx*4+18h]
more compact stack adjust like push ecx as a substitute for sub esp,4 is sometimes used to adjust the stack for a local variable
function realignment [to 16 bytes boundaries] is often used to allow more efficient use of cache and paging
delayed opcodes [opcode reordering] is sometimes seen and might improve parallel pipelines behavior [opcode pairing]
code repetition is used to have less jumps, for speed
% section #1 .text code execute read [60000020] 401000: 6A 20 push 20h // function argument E8 09 00 00 00 call 401010 83 C4 04 add esp,4 // stack restore after c-style call 33 C0 xor eax,eax // clear register C3 ret // c-style return from procedure 401010: 51 push ecx // adjust stack for local variables 53 push ebx // | [shorter version than sub esp,...] 8B 5C 24 0C mov ebx,dword ptr [esp+0Ch] // function argument 56 push esi // save non-volatile registers 33 F6 xor esi,esi 85 DB test ebx,ebx // compare to zero [instead cmp ebx,0] 7E 3F jle 40105C // | [zero looping special case] 57 push edi // save some more non-volatile registers 8B 3D 84 40 40 00 mov edi,dword ptr ds:[404084h] // printf 401024: 56 push esi 68 1C 20 40 00 push 40201Ch // c string literal FF D7 call edi // indirect call 83 C4 08 add esp,8 8D 44 24 14 lea eax,dword ptr [esp+14h] // stack variable address 8D 4C 24 0C lea ecx,dword ptr [esp+0Ch] 50 push eax // [parameter reused as variable] 51 push ecx 56 push esi E8 F1 04 00 00 call 401530 8B 54 24 20 mov edx,dword ptr [esp+20h] 8B 44 24 18 mov eax,dword ptr [esp+18h] 83 C4 0C add esp,0Ch // [delayed stack cleanup] 52 push edx 50 push eax 68 00 20 40 00 push 402000h FF D7 call edi 83 C4 0C add esp,0Ch 46 inc esi // [for-]loop increment 3B F3 cmp esi,ebx 7C C9 jl 401024 // loop jump 5F pop edi // restore non-volatile registers 40105C: 5E pop esi // | 5B pop ebx 59 pop ecx C3 ret 401060: 81 EC 88 00 00 00 sub esp,88h // get stack area for local data 56 push esi 8B B4 24 90 00 00 00 mov esi,dword ptr [esp+90h] 8D 44 24 0C lea eax,dword ptr [esp+0Ch] 56 push esi 50 push eax E8 77 08 00 00 call 4018F0 83 C4 08 add esp,8 8D 44 24 04 lea eax,dword ptr [esp+4] 8D 8C 24 94 00 00 00 lea ecx,dword ptr [esp+94h] 8D 94 24 98 00 00 00 lea edx,dword ptr [esp+98h] 50 push eax 68 D0 14 40 00 push 4014D0h // function pointer 89 4C 24 0C mov dword ptr [esp+0Ch],ecx 56 push esi 56 push esi 8D 4C 24 1C lea ecx,dword ptr [esp+1Ch] 56 push esi 51 push ecx 89 54 24 20 mov dword ptr [esp+20h],edx E8 17 00 00 00 call 4010C0 83 C4 18 add esp,18h 5E pop esi 81 C4 88 00 00 00 add esp,88h // stack cleanup C3 ret 4010C0: 53 push ebx // [realigned to 16 byte boundaries] 8B 5C 24 08 mov ebx,dword ptr [esp+8] 56 push esi 8B 74 24 14 mov esi,dword ptr [esp+14h] 57 push edi 8B 7C 24 14 mov edi,dword ptr [esp+14h] 85 F6 test esi,esi 7E 0A jle 4010DD 57 push edi 53 push ebx E8 16 08 00 00 call 4018F0 83 C4 08 add esp,8 4010DD: 8B 44 24 24 mov eax,dword ptr [esp+24h] 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 8B 54 24 1C mov edx,dword ptr [esp+1Ch] 50 push eax // [lots of function arguments] 51 push ecx // | 52 push edx // | 6A 00 push 0 // | 6A 00 push 0 // | 56 push esi // | 57 push edi // | 53 push ebx // | E8 08 00 00 00 call 401100 83 C4 20 add esp,20h 5F pop edi 5E pop esi 5B pop ebx C3 ret 401100: 8B 44 24 18 mov eax,dword ptr [esp+18h] 53 push ebx // save non-volatile registers 55 push ebp // | 56 push esi // | 85 C0 test eax,eax 57 push edi // save more non-volatile registers 75 2A jne 401136 // delayed jump [to have uniform stack] 8B 44 24 2C mov eax,dword ptr [esp+2Ch] 85 C0 test eax,eax 0F 84 CB 00 00 00 je 4011E3 // longer conditional jump 8B 4C 24 30 mov ecx,dword ptr [esp+30h] 8B 54 24 1C mov edx,dword ptr [esp+1Ch] 51 push ecx 8B 4C 24 1C mov ecx,dword ptr [esp+1Ch] 52 push edx 8B 54 24 1C mov edx,dword ptr [esp+1Ch] 51 push ecx 52 push edx FF D0 call eax // indirect [function pointer] call 83 C4 10 add esp,10h 5F pop edi // restore non-volatile registers 5E pop esi // | 5D pop ebp // | 5B pop ebx // | C3 ret 401136: 8B 6C 24 20 mov ebp,dword ptr [esp+20h] 8B 44 24 18 mov eax,dword ptr [esp+18h] 8B 74 24 24 mov esi,dword ptr [esp+24h] 3B E8 cmp ebp,eax // zero looping test [special case] 0F 8D 99 00 00 00 jge 4011E3 8B 44 24 14 mov eax,dword ptr [esp+14h] 8D 3C A8 lea edi,dword ptr [eax+ebp*4] // array addressing 401151: 3B 74 24 1C cmp esi,dword ptr [esp+1Ch] 7D 6E jge 4011C5 401157: 8B 1F mov ebx,dword ptr [edi] 8B 44 24 28 mov eax,dword ptr [esp+28h] BA 01 00 00 00 mov edx,1 // nth bit 8B CE mov ecx,esi // | D3 E2 shl edx,cl // | 8B 4C 24 1C mov ecx,dword ptr [esp+1Ch] 50 push eax 8B 44 24 18 mov eax,dword ptr [esp+18h] 56 push esi 55 push ebp 51 push ecx 0B D3 or edx,ebx // set the bit 89 17 mov dword ptr [edi],edx 8B 54 24 28 mov edx,dword ptr [esp+28h] 52 push edx 50 push eax E8 6F 00 00 00 call 4011F0 83 C4 18 add esp,18h 83 F8 01 cmp eax,1 74 31 je 4011BA // [c continue] 83 F8 02 cmp eax,2 74 4E je 4011DC 8B 4C 24 30 mov ecx,dword ptr [esp+30h] 8B 44 24 28 mov eax,dword ptr [esp+28h] 8B 54 24 2C mov edx,dword ptr [esp+2Ch] 51 push ecx 48 dec eax 52 push edx 8B 54 24 24 mov edx,dword ptr [esp+24h] 8D 4E 01 lea ecx,dword ptr [esi+1] // esi+1 50 push eax 8B 44 24 24 mov eax,dword ptr [esp+24h] 51 push ecx 8B 4C 24 24 mov ecx,dword ptr [esp+24h] 55 push ebp 52 push edx 50 push eax 51 push ecx E8 49 FF FF FF call 401100 83 C4 20 add esp,20h 4011BA: 8B 44 24 1C mov eax,dword ptr [esp+1Ch] // loop increment 46 inc esi 3B F0 cmp esi,eax 89 1F mov dword ptr [edi],ebx 7C 92 jl 401157 4011C5: 8B 44 24 18 mov eax,dword ptr [esp+18h] // outer loop increment 33 F6 xor esi,esi 45 inc ebp 83 C7 04 add edi,4 3B E8 cmp ebp,eax 0F 8C 7A FF FF FF jl 401151 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 4011DC: 8B 54 24 14 mov edx,dword ptr [esp+14h] 89 1C AA mov dword ptr [edx+ebp*4],ebx 4011E3: 5F pop edi // [code repetition] 5E pop esi // | 5D pop ebp // | 5B pop ebx // | C3 ret // | 4011F0: 8B 44 24 0C mov eax,dword ptr [esp+0Ch] 8B 54 24 14 mov edx,dword ptr [esp+14h] 53 push ebx 55 push ebp 8D 48 FF lea ecx,dword ptr [eax-1] 56 push esi 8B 74 24 1C mov esi,dword ptr [esp+1Ch] 57 push edi 8B 7C 24 14 mov edi,dword ptr [esp+14h] 3B D1 cmp edx,ecx 75 25 jne 401230 8B 04 B7 mov eax,dword ptr [edi+esi*4] // array access 85 C0 test eax,eax 75 0A jne 40121C B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 40121C: 85 F6 test esi,esi 7E 10 jle 401230 85 44 B7 FC test dword ptr [edi+esi*4-4],eax 75 0A jne 401230 B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 401230: 85 D2 test edx,edx 75 2B jne 40125F 85 F6 test esi,esi 7E 27 jle 40125F 8B 44 B7 FC mov eax,dword ptr [edi+esi*4-4] 85 C0 test eax,eax 75 0A jne 40124A B8 02 00 00 00 mov eax,2 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 40124A: 83 FE 01 cmp esi,1 7E 10 jle 40125F 85 44 B7 F8 test dword ptr [edi+esi*4-8],eax 75 0A jne 40125F B8 02 00 00 00 mov eax,2 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 40125F: 83 7C 24 28 01 cmp dword ptr [esp+28h],1 75 29 jne 40128F 3B D1 cmp edx,ecx 74 25 je 40128F 8B 04 B7 mov eax,dword ptr [edi+esi*4] 85 C0 test eax,eax 75 0A jne 40127B B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 40127B: 85 F6 test esi,esi 7E 10 jle 40128F 85 44 B7 FC test dword ptr [edi+esi*4-4],eax 75 0A jne 40128F B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 40128F: 8B 5C 24 18 mov ebx,dword ptr [esp+18h] 8D 6B FF lea ebp,dword ptr [ebx-1] 3B F5 cmp esi,ebp 75 1E jne 4012B8 6A 00 push 0 53 push ebx 57 push edi E8 0D 06 00 00 call 4018B0 83 C4 0C add esp,0Ch 85 C0 test eax,eax 75 0A jne 4012B4 B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 4012B4: 8B 54 24 24 mov edx,dword ptr [esp+24h] 4012B8: 83 7C 24 28 01 cmp dword ptr [esp+28h],1 75 25 jne 4012E4 3B F5 cmp esi,ebp 74 21 je 4012E4 8D 4E 01 lea ecx,dword ptr [esi+1] 6A 00 push 0 51 push ecx 57 push edi E8 E1 05 00 00 call 4018B0 83 C4 0C add esp,0Ch 85 C0 test eax,eax 75 0A jne 4012E0 B8 02 00 00 00 mov eax,2 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 4012E0: 8B 54 24 24 mov edx,dword ptr [esp+24h] 4012E4: 83 C3 FE add ebx,0FEh 3B F3 cmp esi,ebx 0F 8D 83 00 00 00 jge 401372 8B 2C B7 mov ebp,dword ptr [edi+esi*4] 8D 5A 01 lea ebx,dword ptr [edx+1] 83 FB 20 cmp ebx,20h 73 2C jae 401326 8B 44 24 1C mov eax,dword ptr [esp+1Ch] 85 C0 test eax,eax 7E 17 jle 401319 B9 20 00 00 00 mov ecx,20h 83 CA FF or edx,0FFh // -1 2B C8 sub ecx,eax // [massive instruction reordering] 83 C8 FF or eax,0FFh D3 EA shr edx,cl // bits up to 8B CB mov ecx,ebx D3 E0 shl eax,cl // bits up from 23 C2 and eax,edx // bits from to [bit range] EB 0F jmp 401328 401319: 83 C8 FF or eax,0FFh 8B CB mov ecx,ebx D3 E0 shl eax,cl 33 D2 xor edx,edx // 0 23 C2 and eax,edx // 0 too EB 02 jmp 401328 // [questionable jump] 401326: 33 C0 xor eax,eax 401328: 8B D5 mov edx,ebp 0B D0 or edx,eax 89 14 B7 mov dword ptr [edi+esi*4],edx 8B 54 24 1C mov edx,dword ptr [esp+1Ch] 85 D2 test edx,edx 7E 0E jle 401345 B9 20 00 00 00 mov ecx,20h 83 C8 FF or eax,0FFh 2B CA sub ecx,edx D3 E8 shr eax,cl EB 02 jmp 401347 401345: 33 C0 xor eax,eax 401347: 89 44 B7 04 mov dword ptr [edi+esi*4+4],eax 8D 46 02 lea eax,dword ptr [esi+2] 52 push edx 50 push eax 57 push edi E8 2A 00 00 00 call 401380 83 C4 0C add esp,0Ch 89 2C B7 mov dword ptr [edi+esi*4],ebp 85 C0 test eax,eax C7 44 B7 04 00 00 00 00 mov dword ptr [edi+esi*4+4],0 75 0A jne 401372 B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 401372: 5F pop edi 5E pop esi 5D pop ebp 33 C0 xor eax,eax 5B pop ebx C3 ret 401380: 81 EC 08 01 00 00 sub esp,108h 8D 44 24 04 lea eax,dword ptr [esp+4] 8D 4C 24 00 lea ecx,dword ptr [esp] 53 push ebx 55 push ebp 8B AC 24 14 01 00 00 mov ebp,dword ptr [esp+114h] 56 push esi 57 push edi 8B BC 24 20 01 00 00 mov edi,dword ptr [esp+120h] 50 push eax 51 push ecx 57 push edi 55 push ebp E8 E7 05 00 00 call 401990 8B 44 24 20 mov eax,dword ptr [esp+20h] 83 C4 10 add esp,10h 83 F8 FF cmp eax,0FFh // compare to -1 0F 84 01 01 00 00 je 4014BA // c return 8D 54 24 18 lea edx,dword ptr [esp+18h] 57 push edi 52 push edx E8 2C 05 00 00 call 4018F0 83 C4 08 add esp,8 8D 84 24 98 00 00 00 lea eax,dword ptr [esp+98h] 57 push edi 50 push eax E8 1B 05 00 00 call 4018F0 8B 4C 24 18 mov ecx,dword ptr [esp+18h] BA 01 00 00 00 mov edx,1 83 C4 08 add esp,8 8D 04 8D 00 00 00 00 lea eax,dword ptr [ecx*4+0h] 8B 4C 24 14 mov ecx,dword ptr [esp+14h] D3 E2 shl edx,cl 8B 4C 04 18 mov ecx,dword ptr [esp+eax+18h] 0B CA or ecx,edx 89 4C 04 18 mov dword ptr [esp+eax+18h],ecx 89 8C 04 98 00 00 00 mov dword ptr [esp+eax+98h],ecx 4013FF: 33 C9 xor ecx,ecx 85 FF test edi,edi 89 4C 24 10 mov dword ptr [esp+10h],ecx 7E 47 jle 401450 8D 5F FF lea ebx,dword ptr [edi-1] 40140C: 8B 84 8C 98 00 00 00 mov eax,dword ptr [esp+ecx*4+98h] 8D B4 8C 98 00 00 00 lea esi,dword ptr [esp+ecx*4+98h] 3B CB cmp ecx,ebx 7D 04 jge 401422 0B 44 8C 1C or eax,dword ptr [esp+ecx*4+1Ch] 401422: 85 C9 test ecx,ecx 7E 04 jle 40142A 0B 44 8C 14 or eax,dword ptr [esp+ecx*4+14h] 40142A: 8B 54 8C 18 mov edx,dword ptr [esp+ecx*4+18h] 8B EA mov ebp,edx 03 D2 add edx,edx // *=2 D1 FD sar ebp,1 // /=2 0B C5 or eax,ebp 8B AC 24 1C 01 00 00 mov ebp,dword ptr [esp+11Ch] 0B C2 or eax,edx 8B 54 8D 00 mov edx,dword ptr [ebp+ecx*4] 23 D0 and edx,eax 41 inc ecx 3B CF cmp ecx,edi 89 16 mov dword ptr [esi],edx 89 4C 24 10 mov dword ptr [esp+10h],ecx 7C BC jl 40140C 401450: 33 F6 xor esi,esi 33 D2 xor edx,edx 85 FF test edi,edi 7E 1F jle 401477 401458: 8B 84 94 98 00 00 00 mov eax,dword ptr [esp+edx*4+98h] 8B 5C 94 18 mov ebx,dword ptr [esp+edx*4+18h] 8D 4C 94 18 lea ecx,dword ptr [esp+edx*4+18h] 3B C3 cmp eax,ebx 74 07 je 401472 BE 01 00 00 00 mov esi,1 89 01 mov dword ptr [ecx],eax 401472: 42 inc edx 3B D7 cmp edx,edi 7C E1 jl 401458 401477: 85 F6 test esi,esi 75 84 jne 4013FF 33 C0 xor eax,eax 85 FF test edi,edi 89 44 24 10 mov dword ptr [esp+10h],eax 7E 35 jle 4014BA 401485: 8B 8C 84 98 00 00 00 mov ecx,dword ptr [esp+eax*4+98h] 8B 54 85 00 mov edx,dword ptr [ebp+eax*4] 3B CA cmp ecx,edx 75 19 jne 4014AD 40 inc eax 3B C7 cmp eax,edi 89 44 24 10 mov dword ptr [esp+10h],eax 7C E8 jl 401485 B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx 81 C4 08 01 00 00 add esp,108h C3 ret 4014AD: 33 C0 xor eax,eax // 0 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx 81 C4 08 01 00 00 add esp,108h C3 ret 4014BA: 5F pop edi // code duplication 5E pop esi 5D pop ebp B8 01 00 00 00 mov eax,1 // 1 5B pop ebx 81 C4 08 01 00 00 add esp,108h C3 ret 4014D0: 53 push ebx 56 push esi 57 push edi 8B 7C 24 14 mov edi,dword ptr [esp+14h] 85 FF test edi,edi 74 44 je 40151F 8B 5C 24 18 mov ebx,dword ptr [esp+18h] 85 DB test ebx,ebx 74 3C je 40151F 8B 74 24 10 mov esi,dword ptr [esp+10h] 83 3E 00 cmp dword ptr [esi],0 74 33 je 40151F 6A 00 push 0 57 push edi 56 push esi E8 BB 03 00 00 call 4018B0 83 C4 0C add esp,0Ch 85 C0 test eax,eax 74 23 je 40151F 53 push ebx 57 push edi 56 push esi E8 7C FE FF FF call 401380 83 C4 0C add esp,0Ch 85 C0 test eax,eax 74 14 je 40151F 8B 44 24 1C mov eax,dword ptr [esp+1Ch] // reference 1st order 8B 50 04 mov edx,dword ptr [eax+4] // reference 2nd order 8B 08 mov ecx,dword ptr [eax] 8B 02 mov eax,dword ptr [edx] // reference 3rd order 50 push eax 53 push ebx 57 push edi 56 push esi FF 11 call dword ptr [ecx] 83 C4 10 add esp,10h 40151F: 5F pop edi // multiple used return label 5E pop esi 5B pop ebx C3 ret 401530: 8B 4C 24 08 mov ecx,dword ptr [esp+8] 83 EC 08 sub esp,8 85 C9 test ecx,ecx 74 06 je 401541 C7 01 00 00 00 00 mov dword ptr [ecx],0 401541: 8B 44 24 14 mov eax,dword ptr [esp+14h] 85 C0 test eax,eax 74 06 je 40154F C7 00 00 00 00 00 mov dword ptr [eax],0 40154F: 85 C9 test ecx,ecx // logical [boolean] or test 75 04 jne 401557 // | with [c] sequence point 85 C0 test eax,eax // | 74 1F je 401576 // | 401557: 89 44 24 04 mov dword ptr [esp+4],eax 8D 44 24 00 lea eax,dword ptr [esp] 89 4C 24 00 mov dword ptr [esp],ecx 8B 4C 24 0C mov ecx,dword ptr [esp+0Ch] 50 push eax 68 80 15 40 00 push 401580h // function pointer 51 push ecx E8 ED FA FF FF call 401060 83 C4 0C add esp,0Ch 401576: 83 C4 08 add esp,8 C3 ret 401580: 8B 4C 24 10 mov ecx,dword ptr [esp+10h] 56 push esi 8B 01 mov eax,dword ptr [ecx] 8B 71 04 mov esi,dword ptr [ecx+4] 85 C0 test eax,eax 74 02 je 401590 FF 00 inc dword ptr [eax] 401590: 85 F6 test esi,esi 74 1D je 4015B1 8B 44 24 10 mov eax,dword ptr [esp+10h] 8B 4C 24 0C mov ecx,dword ptr [esp+0Ch] 8B 54 24 08 mov edx,dword ptr [esp+8] 50 push eax 51 push ecx 52 push edx E8 18 00 00 00 call 4015C0 // predicate call, with conditional block 83 C4 0C add esp,0Ch // | 85 C0 test eax,eax // | 74 02 je 4015B1 // | FF 06 inc dword ptr [esi] 4015B1: 5E pop esi C3 ret 4015C0: 83 EC 0C sub esp,0Ch // [16 bytes aligned] 8D 44 24 18 lea eax,dword ptr [esp+18h] 8D 4C 24 14 lea ecx,dword ptr [esp+14h] 53 push ebx // save non-volatile registers 55 push ebp // | 56 push esi // | 57 push edi // | 8B 7C 24 20 mov edi,dword ptr [esp+20h] 50 push eax 51 push ecx 57 push edi E8 25 04 00 00 call 401A00 8B 6C 24 34 mov ebp,dword ptr [esp+34h] 8B 44 24 30 mov eax,dword ptr [esp+30h] 83 C4 0C add esp,0Ch 3B C5 cmp eax,ebp 7E 0A jle 4015F4 33 C0 xor eax,eax 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx 83 C4 0C add esp,0Ch C3 ret 4015F4: 33 DB xor ebx,ebx C7 44 24 10 FF FF FF FF mov dword ptr [esp+10h],0FFFFFFFFh 85 C0 test eax,eax 0F 8E 8E 02 00 00 jle 401894 401606: 33 F6 xor esi,esi 85 ED test ebp,ebp 0F 8E 61 02 00 00 jle 401871 8B 54 24 20 mov edx,dword ptr [esp+20h] 89 54 24 14 mov dword ptr [esp+14h],edx 401618: F6 44 24 10 01 test byte ptr [esp+10h],1 74 3F je 40165E BA 01 00 00 00 mov edx,1 8B CE mov ecx,esi D3 E2 shl edx,cl // nth bit 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 2B C3 sub eax,ebx 8B 4C 81 FC mov ecx,dword ptr [ecx+eax*4-4] 8B 07 mov eax,dword ptr [edi] 23 CA and ecx,edx // nth bit F7 D9 neg ecx // carryflag = !zeroflag 1B C9 sbb ecx,ecx // 0 or -1 23 C2 and eax,edx F7 D9 neg ecx // 1 or 2 F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C1 sub eax,ecx // -1 or 0 or 1 [sign(diff)] 83 F8 FF cmp eax,0FFh 0F 84 3B 02 00 00 je 40188A // [quite long jump] 83 F8 01 cmp eax,1 75 0A jne 40165E 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 FE and al,0FEh 89 44 24 10 mov dword ptr [esp+10h],eax 40165E: F6 44 24 10 02 test byte ptr [esp+10h],2 74 43 je 4016A8 8B CD mov ecx,ebp 8B 07 mov eax,dword ptr [edi] 2B CE sub ecx,esi BA 01 00 00 00 mov edx,1 // some code repetitions ... 49 dec ecx D3 E2 shl edx,cl 8B CE mov ecx,esi 23 D0 and edx,eax B8 01 00 00 00 mov eax,1 F7 DA neg edx 1B D2 sbb edx,edx D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] F7 DA neg edx 23 C1 and eax,ecx F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C2 sub eax,edx 83 F8 FF cmp eax,0FFh 0F 84 F1 01 00 00 je 40188A 83 F8 01 cmp eax,1 75 0A jne 4016A8 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 FD and al,0FDh 89 44 24 10 mov dword ptr [esp+10h],eax 4016A8: F6 44 24 10 04 test byte ptr [esp+10h],4 74 4D je 4016FC 8B 44 24 24 mov eax,dword ptr [esp+24h] 8B CD mov ecx,ebp 2B CE sub ecx,esi BA 01 00 00 00 mov edx,1 49 dec ecx 2B C3 sub eax,ebx D3 E2 shl edx,cl 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 23 54 81 FC and edx,dword ptr [ecx+eax*4-4] B8 01 00 00 00 mov eax,1 8B CE mov ecx,esi F7 DA neg edx 1B D2 sbb edx,edx D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] F7 DA neg edx 23 C1 and eax,ecx F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C2 sub eax,edx 83 F8 FF cmp eax,0FFh 0F 84 9D 01 00 00 je 40188A 83 F8 01 cmp eax,1 75 0A jne 4016FC 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 FB and al,0FBh 89 44 24 10 mov dword ptr [esp+10h],eax 4016FC: 39 6C 24 24 cmp dword ptr [esp+24h],ebp 0F 85 53 01 00 00 jne 401859 F6 44 24 10 08 test byte ptr [esp+10h],8 74 44 je 401751 8B 44 24 14 mov eax,dword ptr [esp+14h] BA 01 00 00 00 mov edx,1 8B CB mov ecx,ebx D3 E2 shl edx,cl 8B 08 mov ecx,dword ptr [eax] B8 01 00 00 00 mov eax,1 23 D1 and edx,ecx 8B CE mov ecx,esi F7 DA neg edx 1B D2 sbb edx,edx D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] F7 DA neg edx 23 C1 and eax,ecx F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C2 sub eax,edx 83 F8 FF cmp eax,0FFh 0F 84 48 01 00 00 je 40188A 83 F8 01 cmp eax,1 75 0A jne 401751 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 F7 and al,0F7h 89 44 24 10 mov dword ptr [esp+10h],eax 401751: F6 44 24 10 10 test byte ptr [esp+10h],10h 74 49 je 4017A1 8B 4C 24 24 mov ecx,dword ptr [esp+24h] 8B 44 24 14 mov eax,dword ptr [esp+14h] 2B CB sub ecx,ebx BA 01 00 00 00 mov edx,1 49 dec ecx D3 E2 shl edx,cl 8B 08 mov ecx,dword ptr [eax] B8 01 00 00 00 mov eax,1 23 D1 and edx,ecx 8B CE mov ecx,esi F7 DA neg edx 1B D2 sbb edx,edx D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] F7 DA neg edx 23 C1 and eax,ecx F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C2 sub eax,edx 83 F8 FF cmp eax,0FFh 0F 84 F8 00 00 00 je 40188A 83 F8 01 cmp eax,1 75 0A jne 4017A1 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 EF and al,0EFh 89 44 24 10 mov dword ptr [esp+10h],eax 4017A1: F6 44 24 10 20 test byte ptr [esp+10h],20h 74 4A je 4017F2 B8 01 00 00 00 mov eax,1 8B CB mov ecx,ebx 8B D5 mov edx,ebp D3 E0 shl eax,cl 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 2B D6 sub edx,esi 8B 54 91 FC mov edx,dword ptr [ecx+edx*4-4] 8B CE mov ecx,esi 23 D0 and edx,eax B8 01 00 00 00 mov eax,1 F7 DA neg edx 1B D2 sbb edx,edx D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] F7 DA neg edx 23 C1 and eax,ecx F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C2 sub eax,edx 83 F8 FF cmp eax,0FFh 0F 84 A7 00 00 00 je 40188A 83 F8 01 cmp eax,1 75 0A jne 4017F2 8B 44 24 10 mov eax,dword ptr [esp+10h] 24 DF and al,0DFh 89 44 24 10 mov dword ptr [esp+10h],eax 4017F2: 8B 54 24 10 mov edx,dword ptr [esp+10h] F6 C2 40 test dl,40h 74 4C je 401847 8B 4C 24 24 mov ecx,dword ptr [esp+24h] B8 01 00 00 00 mov eax,1 2B CB sub ecx,ebx 2B EE sub ebp,esi 49 dec ecx D3 E0 shl eax,cl 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 23 44 A9 FC and eax,dword ptr [ecx+ebp*4-4] 8B CE mov ecx,esi F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 89 44 24 18 mov dword ptr [esp+18h],eax B8 01 00 00 00 mov eax,1 D3 E0 shl eax,cl 8B 0F mov ecx,dword ptr [edi] 23 C1 and eax,ecx 8B 4C 24 18 mov ecx,dword ptr [esp+18h] F7 D8 neg eax 1B C0 sbb eax,eax F7 D8 neg eax 2B C1 sub eax,ecx 83 F8 FF cmp eax,0FFh 74 4F je 40188A 83 F8 01 cmp eax,1 75 07 jne 401847 83 E2 BF and edx,0BFh 89 54 24 10 mov dword ptr [esp+10h],edx 401847: 52 push edx E8 C3 00 00 00 call 401910 83 C4 04 add esp,4 83 F8 07 cmp eax,7 74 3F je 401894 8B 6C 24 28 mov ebp,dword ptr [esp+28h] 401859: 8B 4C 24 14 mov ecx,dword ptr [esp+14h] 8B 44 24 24 mov eax,dword ptr [esp+24h] 46 inc esi 83 C1 04 add ecx,4 3B F5 cmp esi,ebp 89 4C 24 14 mov dword ptr [esp+14h],ecx 0F 8C A7 FD FF FF jl 401618 401871: 43 inc ebx 83 C7 04 add edi,4 3B D8 cmp ebx,eax 0F 8C 89 FD FF FF jl 401606 B8 01 00 00 00 mov eax,1 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx 83 C4 0C add esp,0Ch C3 ret 40188A: 33 C0 xor eax,eax 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx 83 C4 0C add esp,0Ch C3 ret 401894: 5F pop edi 5E pop esi 5D pop ebp B8 01 00 00 00 mov eax,1 5B pop ebx 83 C4 0C add esp,0Ch C3 ret 4018B0: 8B 54 24 08 mov edx,dword ptr [esp+8] 33 C0 xor eax,eax 56 push esi 85 D2 test edx,edx 7E 26 jle 4018E1 8B 4C 24 10 mov ecx,dword ptr [esp+10h] BE 01 00 00 00 mov esi,1 D3 E6 shl esi,cl 8B 4C 24 08 mov ecx,dword ptr [esp+8] 4018CA: 85 31 test dword ptr [ecx],esi 75 0C jne 4018DA 40 inc eax 83 C1 04 add ecx,4 3B C2 cmp eax,edx 7C F4 jl 4018CA 33 C0 xor eax,eax 5E pop esi C3 ret 4018DA: B8 01 00 00 00 mov eax,1 5E pop esi C3 ret 4018E1: 33 C0 xor eax,eax // [questionable code duplication] 5E pop esi C3 ret 4018F0: 8B 4C 24 08 mov ecx,dword ptr [esp+8] 85 C9 test ecx,ecx // check for zero count [special case] 7E 0A jle 401902 57 push edi 8B 7C 24 08 mov edi,dword ptr [esp+8] 33 C0 xor eax,eax // zero-out memory F3 AB rep stos dword ptr es:[edi] // | 5F pop edi 401902: C3 ret 401910: 8B 44 24 04 mov eax,dword ptr [esp+4] 50 push eax E8 06 00 00 00 call 401920 83 C4 04 add esp,4 C3 ret 401920: 8B 44 24 04 mov eax,dword ptr [esp+4] // first argument 85 C0 test eax,eax // [special case] 75 04 jne 40192C 83 C8 FF or eax,0FFh // shorter bytecode for mov eax,-1 C3 ret 40192C: 8B D0 mov edx,eax 33 C9 xor ecx,ecx 81 E2 FF FF 00 00 and edx,0FFFFh // check bit mask 74 07 je 40193F // | B9 01 00 00 00 mov ecx,1 8B C2 mov eax,edx 40193F: 8B D0 mov edx,eax D1 E1 shl ecx,1 // propagate bit 81 E2 FF 00 FF 00 and edx,0FF00FFh 74 05 je 401950 83 C9 01 or ecx,1 // set next bit 8B C2 mov eax,edx 401950: 8B D0 mov edx,eax D1 E1 shl ecx,1 // propagate bit 81 E2 0F 0F 0F 0F and edx,0F0F0F0Fh 74 05 je 401961 83 C9 01 or ecx,1 8B C2 mov eax,edx 401961: 8B D0 mov edx,eax D1 E1 shl ecx,1 81 E2 33 33 33 33 and edx,33333333h 74 05 je 401972 83 C9 01 or ecx,1 8B C2 mov eax,edx 401972: D1 E1 shl ecx,1 A9 55 55 55 55 test eax,55555555h 74 03 je 40197E 83 C9 01 or ecx,1 40197E: B8 1F 00 00 00 mov eax,1Fh 2B C1 sub eax,ecx C3 ret 401990: 53 push ebx 55 push ebp 8B 6C 24 14 mov ebp,dword ptr [esp+14h] 56 push esi 85 ED test ebp,ebp // check for null pointer 57 push edi 74 07 je 4019A3 C7 45 00 FF FF FF FF mov dword ptr [ebp],0FFFFFFFFh // -1 4019A3: 8B 44 24 20 mov eax,dword ptr [esp+20h] 85 C0 test eax,eax 74 06 je 4019B1 C7 00 FF FF FF FF mov dword ptr [eax],0FFFFFFFFh 4019B1: 8B 5C 24 18 mov ebx,dword ptr [esp+18h] 33 F6 xor esi,esi 85 DB test ebx,ebx 7E 32 jle 4019ED 8B 7C 24 14 mov edi,dword ptr [esp+14h] 4019BF: 8B 07 mov eax,dword ptr [edi] 50 push eax E8 49 FF FF FF call 401910 83 C4 04 add esp,4 83 F8 FF cmp eax,0FFh 75 0D jne 4019DC 46 inc esi 83 C7 04 add edi,4 3B F3 cmp esi,ebx 7C E8 jl 4019BF 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 4019DC: 85 ED test ebp,ebp 74 03 je 4019E3 89 75 00 mov dword ptr [ebp],esi 4019E3: 8B 4C 24 20 mov ecx,dword ptr [esp+20h] 85 C9 test ecx,ecx 74 02 je 4019ED 89 01 mov dword ptr [ecx],eax 4019ED: 5F pop edi 5E pop esi 5D pop ebp 5B pop ebx C3 ret 401A00: 56 push esi 8B 74 24 0C mov esi,dword ptr [esp+0Ch] 57 push edi 8B 7C 24 14 mov edi,dword ptr [esp+14h] 83 3E 00 cmp dword ptr [esi],0 7E 44 jle 401A53 83 3F 00 cmp dword ptr [edi],0 7E 3F jle 401A53 8B 4C 24 0C mov ecx,dword ptr [esp+0Ch] 401A18: 8B 06 mov eax,dword ptr [esi] 8B 54 81 FC mov edx,dword ptr [ecx+eax*4-4] 85 D2 test edx,edx 75 07 jne 401A29 48 dec eax 85 C0 test eax,eax 89 06 mov dword ptr [esi],eax 7F EF jg 401A18 401A29: 8B 06 mov eax,dword ptr [esi] 85 C0 test eax,eax 75 05 jne 401A34 89 07 mov dword ptr [edi],eax 5F pop edi 5E pop esi C3 ret 401A34: 50 push eax 51 push ecx E8 A5 00 00 00 call 401AE0 83 C4 08 add esp,8 50 push eax E8 2C 00 00 00 call 401A70 83 C4 04 add esp,4 40 inc eax 85 C0 test eax,eax 89 07 mov dword ptr [edi],eax 75 11 jne 401A5F 89 06 mov dword ptr [esi],eax 5F pop edi 5E pop esi C3 ret 401A53: C7 07 00 00 00 00 mov dword ptr [edi],0 C7 06 00 00 00 00 mov dword ptr [esi],0 401A5F: 5F pop edi 5E pop esi C3 ret 401A70: 8B 44 24 04 mov eax,dword ptr [esp+4] 50 push eax E8 06 00 00 00 call 401A80 83 C4 04 add esp,4 C3 ret 401A80: 8B 4C 24 04 mov ecx,dword ptr [esp+4] 85 C9 test ecx,ecx 75 04 jne 401A8C 83 C8 FF or eax,0FFh C3 ret 401A8C: 8B D1 mov edx,ecx 33 C0 xor eax,eax 81 E2 00 00 FF FF and edx,0FFFF0000h // bit mask 74 07 je 401A9F B8 01 00 00 00 mov eax,1 8B CA mov ecx,edx 401A9F: 8B D1 mov edx,ecx D1 E0 shl eax,1 81 E2 00 FF 00 FF and edx,0FF00FF00h 74 04 je 401AAF 0C 01 or al,1 // bit set 8B CA mov ecx,edx 401AAF: 8B D1 mov edx,ecx D1 E0 shl eax,1 // bit propagation 81 E2 F0 F0 F0 F0 and edx,0F0F0F0F0h 74 04 je 401ABF 0C 01 or al,1 8B CA mov ecx,edx 401ABF: 8B D1 mov edx,ecx D1 E0 shl eax,1 81 E2 CC CC CC CC and edx,0CCCCCCCCh 74 04 je 401ACF 0C 01 or al,1 8B CA mov ecx,edx 401ACF: D1 E0 shl eax,1 F7 C1 AA AA AA AA test ecx,0AAAAAAAAh 74 02 je 401ADB 0C 01 or al,1 401ADB: C3 ret 401AE0: 8B 54 24 08 mov edx,dword ptr [esp+8] 33 C0 xor eax,eax 85 D2 test edx,edx // zero loop check 7E 10 jle 401AFA // | 8B 4C 24 04 mov ecx,dword ptr [esp+4] 56 push esi // [delayed register save] 401AEF: 8B 31 mov esi,dword ptr [ecx] 83 C1 04 add ecx,4 0B C6 or eax,esi // arithmetic-or on vector 4A dec edx 75 F6 jne 401AEF 5E pop esi 401AFA: C3 ret entry_point: // [as found in program executable header] 401B00: 55 push ebp // establish a new stack frame 8B EC mov ebp,esp // | [startup code compiled differently] 6A FF push 0FFh 68 30 20 40 00 push 402030h 68 A0 1C 40 00 push 401CA0h // _except_handler3 64 A1 00 00 00 00 mov eax,fs:[0] 50 push eax 64 89 25 00 00 00 00 mov dword ptr fs:[0h],esp 83 C4 E0 add esp,0E0h // sub esp,32 53 push ebx // [non-volatiles] 56 push esi // | 57 push edi // | 89 65 E8 mov dword ptr [ebp-18h],esp // ebp-relative reference C7 45 FC 00 00 00 00 mov dword ptr [ebp-4],0 // esp+38h 6A 01 push 1 FF 15 90 40 40 00 call dword ptr ds:[404090h] // __set_app_type 83 C4 04 add esp,4 C7 05 30 30 40 00 FF FF FF FF mov dword ptr ds:[403030h],0FFFFFFFFh C7 05 34 30 40 00 FF FF FF FF mov dword ptr ds:[403034h],0FFFFFFFFh FF 15 8C 40 40 00 call dword ptr ds:[40408Ch] // __p__fmode 8B 0D 2C 30 40 00 mov ecx,dword ptr ds:[40302Ch] 89 08 mov dword ptr [eax],ecx FF 15 88 40 40 00 call dword ptr ds:[404088h] // __p__commode 8B 15 28 30 40 00 mov edx,dword ptr ds:[403028h] 89 10 mov dword ptr [eax],edx A1 64 40 40 00 mov eax,[404064] // _adjust_fdiv 8B 08 mov ecx,dword ptr [eax] 89 0D 38 30 40 00 mov dword ptr ds:[403038h],ecx E8 16 01 00 00 call 401C90 A1 10 30 40 00 mov eax,[403010] 85 C0 test eax,eax 75 0E jne 401B91 68 80 1C 40 00 push 401C80h FF 15 80 40 40 00 call dword ptr ds:[404080h] // __setusermatherr 83 C4 04 add esp,4 401B91: E8 CA 00 00 00 call 401C60 68 0C 30 40 00 push 40300Ch 68 08 30 40 00 push 403008h E8 B1 00 00 00 call 401C56 // _initterm 83 C4 08 add esp,8 8B 15 24 30 40 00 mov edx,dword ptr ds:[403024h] 89 55 D8 mov dword ptr [ebp-28h],edx 8D 45 D8 lea eax,dword ptr [ebp-28h] 50 push eax 8B 0D 20 30 40 00 mov ecx,dword ptr ds:[403020h] 51 push ecx 8D 55 E0 lea edx,dword ptr [ebp-20h] // &envp 52 push edx 8D 45 D4 lea eax,dword ptr [ebp-2Ch] // &argv 50 push eax 8D 4D E4 lea ecx,dword ptr [ebp-1Ch] // &argc 51 push ecx FF 15 78 40 40 00 call dword ptr ds:[404078h] // __getmainargs 83 C4 14 add esp,14h 68 04 30 40 00 push 403004h 68 00 30 40 00 push 403000h E8 76 00 00 00 call 401C56 // _initterm 83 C4 08 add esp,8 FF 15 74 40 40 00 call dword ptr ds:[404074h] // __p___initenv 8B 55 E0 mov edx,dword ptr [ebp-20h] 89 10 mov dword ptr [eax],edx 8B 45 E0 mov eax,dword ptr [ebp-20h] // envp 50 push eax 8B 4D D4 mov ecx,dword ptr [ebp-2Ch] // argv 51 push ecx 8B 55 E4 mov edx,dword ptr [ebp-1Ch] // argc 52 push edx E8 01 F4 FF FF call 401000 // main 83 C4 0C add esp,0Ch 89 45 DC mov dword ptr [ebp-24h],eax 50 push eax FF 15 70 40 40 00 call dword ptr ds:[404070h] // exit EB 22 jmp 401C30 401C0E: 8B 45 EC mov eax,dword ptr [ebp-14h] 8B 08 mov ecx,dword ptr [eax] 8B 09 mov ecx,dword ptr [ecx] 89 4D D0 mov dword ptr [ebp-30h],ecx 50 push eax 51 push ecx E8 31 00 00 00 call 401C50 // _XcptFilter 83 C4 08 add esp,8 C3 ret 401C23: 8B 65 E8 mov esp,dword ptr [ebp-18h] 8B 55 D0 mov edx,dword ptr [ebp-30h] 52 push edx FF 15 68 40 40 00 call dword ptr ds:[404068h] // _exit 401C30: 83 C4 04 add esp,4 C7 45 FC FF FF FF FF mov dword ptr [ebp-4],0FFFFFFFFh 8B 4D F0 mov ecx,dword ptr [ebp-10h] 64 89 0D 00 00 00 00 mov dword ptr fs:[0h],ecx 5F pop edi 5E pop esi 5B pop ebx 8B E5 mov esp,ebp // pop stack frame 5D pop ebp // | C3 ret 401C50: FF 25 6C 40 40 00 jmp dword ptr ds:[40406Ch] // _XcptFilter ; forwarder 401C56: FF 25 7C 40 40 00 jmp dword ptr ds:[40407Ch] // _initterm CC int 3 // debugger trap [unreferenced] CC int 3 // [unreferenced] CC int 3 // [unreferenced] CC int 3 // [unreferenced] 401C60: 68 00 00 03 00 push 30000h 68 00 00 01 00 push 10000h E8 37 00 00 00 call 401CA6 // _controlfp 83 C4 08 add esp,8 C3 ret 401C80: 33 C0 xor eax,eax // return zero C3 ret 401C90: C3 ret // empty procedure 401CA0: FF 25 94 40 40 00 jmp dword ptr ds:[404094h] // _except_handler3 401CA6: FF 25 98 40 40 00 jmp dword ptr ds:[404098h] // _controlfp section #2 .rdata initialized data read only [40000040] 402000: 25 64 20 66 69 67 75 72 65 73 20 28 25 64 20 64 %d figures (%d d 69 73 74 69 6E 63 74 73 29 0A 00 00 istincts)... 40201C: 66 69 67 75 72 65 20 73 69 7A 65 20 25 64 3A 20 figure size %d: 00 00 00 00 .... 402030: FF FF FF FF 0E 1C 40 00 23 1C 40 00 ......@.#.@. section #3 .data initialized data read write [C0000040] 403000: 00 00 00 00 .... 403004: 00 00 00 00 .... 403008: 00 00 00 00 .... 40300C: 00 00 00 00 .... 403010: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 403020: 00 00 00 00 .... 403024: 00 00 00 00 .... 403028: 00 00 00 00 .... 40302C: 00 00 00 00 .... 403030: 00 00 00 00 .... 403034: 00 00 00 00 .... 403038: 00 00 00 00 .... section #4 .idata initialized data read write [C0000040] import_directory: // [as found in program executable header] 404000: 28 40 00 00 00 00 00 00 00 00 00 00 AA 40 00 00 (@...........@.. 64 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d@.............. 00 00 00 00 00 00 00 00 ........ 404028: 14 41 00 00 B6 40 00 00 BE 40 00 00 CC 40 00 00 .A...@...@...@.. D4 40 00 00 E4 40 00 00 F4 40 00 00 00 41 00 00 .@...@...@...A.. A0 40 00 00 24 41 00 00 34 41 00 00 42 41 00 00 .@..$A..4A..BA.. 54 41 00 00 68 41 00 00 00 00 00 00 TA..hA...... import_address_table_directory: // [as found in program executable header] 404064: 14 41 00 00 .A.. // _adjust_fdiv 404068: B6 40 00 00 .@.. // _exit 40406C: BE 40 00 00 .@.. // _XcptFilter 404070: CC 40 00 00 .@.. // exit 404074: D4 40 00 00 .@.. // __p___initenv 404078: E4 40 00 00 .@.. // __getmainargs 40407C: F4 40 00 00 .@.. // _initterm 404080: 00 41 00 00 .A.. // __setusermatherr 404084: A0 40 00 00 .@.. // printf 404088: 24 41 00 00 $A.. // __p__commode 40408C: 34 41 00 00 4A.. // __p__fmode 404090: 42 41 00 00 BA.. // __set_app_type 404094: 54 41 00 00 TA.. // _except_handler3 404098: 68 41 00 00 00 00 00 00 hA...... // _controlfp 4040A0: 99 02 70 72 69 6E 74 66 00 00 ..printf.. 4040AA: 4D 53 56 43 52 54 2E 64 6C 6C 00 00 MSVCRT.dll.. 4040B6: CF 00 5F 65 78 69 74 00 .._exit. 4040BE: 48 00 5F 58 63 70 74 46 69 6C 74 65 72 00 H._XcptFilter. 4040CC: 44 02 65 78 69 74 00 00 D.exit.. 4040D4: 63 00 5F 5F 70 5F 5F 5F 69 6E 69 74 65 6E 76 00 c.__p___initenv. 4040E4: 58 00 5F 5F 67 65 74 6D 61 69 6E 61 72 67 73 00 X.__getmainargs. 4040F4: 0B 01 5F 69 6E 69 74 74 65 72 6D 00 .._initterm. 404100: 81 00 5F 5F 73 65 74 75 73 65 72 6D 61 74 68 65 ..__setusermathe 72 72 00 00 rr.. 404114: 9A 00 5F 61 64 6A 75 73 74 5F 66 64 69 76 00 00 .._adjust_fdiv.. 404124: 69 00 5F 5F 70 5F 5F 63 6F 6D 6D 6F 64 65 00 00 i.__p__commode.. 404134: 6E 00 5F 5F 70 5F 5F 66 6D 6F 64 65 00 00 n.__p__fmode.. 404142: 7F 00 5F 5F 73 65 74 5F 61 70 70 5F 74 79 70 65 ..__set_app_type 00 00 .. 404154: C6 00 5F 65 78 63 65 70 74 5F 68 61 6E 64 6C 65 .._except_handle 72 33 00 00 r3.. 404168: B3 00 5F 63 6F 6E 74 72 6F 6C 66 70 00 00 .._controlfp.. %
http://www.lrdev.com/lr/x86/samp1.html
Eric Laroche, laroche@lrdev.com, Fri Dec 12 2003
Copyright © 2003 Eric Laroche. All rights reserved.
This data is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.