Computer Chess Club Archives




Subject: Re: Rybka code

Author: Joseph Tadeusz

Date: 13:32:02 12/12/05

Go up one level in this thread

On December 12, 2005 at 12:18:50, Chrilly Donninger wrote:

>>>.text:0040D156                 call    sub_40D1B0
>>>.text:0040D15B                 mov     esi, eax
>>>.text:0040D15D                 lea     eax, [esp+278h+var_238]
>>>.text:0040D161                 push    eax
>>>.text:0040D162                 push    edi
>>>.text:0040D163                 neg     esi
>>>.text:0040D165                 call    sub_40A780
>>>.text:0040D16A                 add     esp, 18h
>>>.text:0040D16D                 cmp     esi, [esp+268h+var_25C]
>>>.text:0040D171                 jle     short loc_40D183
>>>.text:0040D173                 cmp     esi, ebx
>>>.text:0040D175                 mov     [esp+268h+var_25C], esi
>>>.text:0040D179                 jle     short loc_40D183
>>>.text:0040D17B                 cmp     esi, [ebp+arg_4]
>>>.text:0040D17E                 mov     [ebp+arg_0], esi
>>>.text:0040D181                 jge     short loc_40D13A
>>How can you tell?  And how on earth did you find it?
>There is a nice tool, called IDA-Pro. (IDA=Interactive DissAssembler).
>IDA produces the code above. And then one needs some (assembler) experience to
>read this.
>E.g. [ebp+arg_0] means the first argument to the function. And if one follows
>somewhat the logic, one sees that this is alpha, [ebp+arg_4] is argument 1 or
>In Pseudo-Code the code above reads as:
>if(val>bestscore) { bestscore=val; }
>if(val>alpha) { alpha=val; }
>if(val>beta) { return val; } // Actually goto return-sequence.
>All programms are open-source. Some opensource is only more difficult to read
>than other.
>Dissassembling is no efficient way to improve one owns code. It does not help,
>if one knows, that programm X has a nice trick. The trick must fit in one owns
>programm/architecture. Usually it does not. E.g the well documented Fruit
>History-Pruning did not work at all in Hydra. Dissassembling is just an old
>hackers fun.

This is what the REC decompiler makes of it:

                    esi = ~(L0040D1B0());
                    esp = esp + 0x18;
                    if(esi <= Vfffffda0) {
                        goto L0040d183;
                    Vfffffda0 = esi;
                    if(esi <= ebx) {
                        goto L0040d183;
                    A8 = esi;
                    if(esi >= Ac) {
                        goto L0040d13a;
                    } else {
                        goto L0040d183;

This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.