mit "__declspec(noinline)" vor der funktionssignatur kannst du (zmdst bei vcc) verhindern, dass der compiler inlined - auch wenn ich nicht verstehe wieso der compiler da anscheinend fehlerhaften code produziert.
ka ist aber auch erst 6 uhr morgens, grad erst aufgestanden, ich guck gleich nochmal rüber.
EDIT:
sicher, dass die klammersetzung hier genauso ist wie in dem code den du kompiliert hast?
EDIT2:
außerdem sind 0 und 1 keine bools die du da returnst - das ist sehr unschön
EDIT3:
ok, verstehe ich jetzt auch nicht, bei mir im testprogramm erzeugt er vollkommen korrekt ein lea eax, [esi-1]:
Code:
for( int i = 1; i <= 10; i++)
00A7100D 8B 3D A4 20 A7 00 mov edi,dword ptr [__imp__printf (0A720A4h)]
00A71013 A3 7C 33 A7 00 mov dword ptr [cClient (0A7337Ch)],eax
00A71018 BE 01 00 00 00 mov esi,1
00A7101D 8D 49 00 lea ecx,[ecx]
{
if(!IsValidIndex(i)) //Hier schriebt er die Funktion direkt rein und es entsteht ein fehler.
00A71020 85 F6 test esi,esi
00A71022 74 25 je main+49h (0A71049h)
00A71024 83 FE 0A cmp esi,0Ah
00A71027 7F 20 jg main+49h (0A71049h)
00A71029 8B 0D 7C 33 A7 00 mov ecx,dword ptr [cClient (0A7337Ch)]
00A7102F 8D 46 FF lea eax,[esi-1]
00A71032 03 C0 add eax,eax
00A71034 83 BC C1 E4 AF 2E 00 00 cmp dword ptr [ecx+eax*8+2EAFE4h],0
00A7103C 74 0B je main+49h (0A71049h)
continue;
printf("Index: %d is valid!\n", i);
00A7103E 56 push esi
00A7103F 68 68 23 A7 00 push offset ___xi_z+2A0h (0A72368h)
00A71044 FF D7 call edi
00A71046 83 C4 08 add esp,8
for( int i = 1; i <= 10; i++)
00A71049 46 inc esi
00A7104A 83 FE 0A cmp esi,0Ah
00A7104D 7E D1 jle main+20h (0A71020h)
}
EDIT4:
kannst mal versuchen die zeile:
Code:
DWORD tmpBase = *(DWORD*)((index-1)*16+4 + 0x002EAFE0 + cClient);
in mehrere zeilen zu splitten, vllt gibts da bei dir i.nen parser fehler - seltsam.
EDIT5:
was haste denn für ne IDE/compiler?
EDIT6:
wenn das da 1:1 der code ist den du kompiliert hast gibts i-nen parserfehler mit der klammerung, würde ich wie gesagt mal die zeile aufsplitten - aber komisch, dass das nur beim inlinen passieren soll.