[ros-dev] Bye bye

Alex Ionescu ionucu at videotron.ca
Thu Jan 19 02:02:15 CET 2006

Hartmut Birr wrote:

>The ReactOS code and the WinXP code is nearly the same. 
As a matter of fact, it is, although more similar to the Win2K3 code.

>The stack check
>and the invalid opcode exception is equal.
Yes, when I analyzed the fast call code (yes I looked at disassembly) I 
saw that check, and I copied it.
Note however, that there is only one way to check the stack: cmp ebp, 
esp. Unless you want to consider cmp esp, ebp as an alternate method.

> The trap frame is created in
>the same sequence. 
You can only create a trap frame in one way, it has a defined layout. I 
point out a difference which proves I don't just copy/paste code. 
Somewhere in the handler, windows does this:

mov ecx, fs:[0]
push ecx

My code does simply:
push fs:[0]

I would also like to point out that unlike certain code which I've found 
in ReactOS (The old ftol implementation comes to mind) which comes from 
assembly, my code is clearly commented, organized and structured, and 
shows that I know what I was doing any not merely copy/pasting some 
assembly. This is much unlike the old ftol code, which was simply an 
exact 100% duplicate of the windows code, with 0 comments and using 
hardcoded values which were not explained (clearly showing that the 
implementer had no idea of what the code did).

>The debug mark 0xbadb0d00 is the same. 
Yes, this is the debug mark found in windows KTRAP_FRAMES. It is a known 
value to any kernel/system developer for Windows that has analyzed many 

>On other
>places we use always something like 0xdeadbeef or 0xceadbeef.
Wow, nice argument. Do you realize that 0xdeadbeef is what *windows* 
uses for memory that has been freed, and 0xceadbeef for memory that 
hasn't been used yet (or something according to those lines)? So you're 
saying "0xbadb0d00 is bad because Windows uses it..but 0xdeadbeef is 
good because..Windows uses it"?

> Each
>revision of syscall.S makes our code closer to the Windows code. 
On the contrary, the syscall.S code was written by myself about a year 
and a half ago, and contained some parts of the code which I had copied 
without fully understanding their use (not from Windows, but from 
crazylord/elicz). After more then a year has passed, I finally got a 
much deeper understanding of all the intricacies involved, and started 
using more constants instead of hardcoded definitions, started adding 
more comments, and turned raw binary code into complex generic macros 
which could generate the code we wanted. I very much doubt that when you 
look at KiServiceExit in IDA you see the sequence of comments and macros 
that I've created. The fact I've been able to make everything much more 
generic and controlled only proves the fact that the implementation is 
mine much more then a copy/paste job. And yes, for the record, I fully 
admit that some parts (which I want to point out were written 18 months 
ago) were copied from elicz's disasembly. But when we are talkig about 
system-level assembly, there aren't 10 ways to do something, except to 
use different registers and pretend to be different. And another thing, 
3 of the DBG checks that I added are becaused I noticed them during a 
late-nite debugging session in WinDBG. I was trying a user-mode kernel 
exploit which modified the trap frame, and this led to some int3s in the 
code. I noticed that some checks were being done (sanity checks, not 
anything functional), and I added them in ReactOS too.

>In some
>days we have exactly the same binary code. 
As I said, the code hasn't changed much since its original 
implementation more then a year ago. Since then, 90% of the chances made 
the code more compact in source-form, added comments, generalized it and 
made it accesible through macros.

>I know that the frame,
>KTHREAD and the PCR layout is predefined. Some of the used informations
>are not public. 
I'd like to know what isn't public and that we're using. When my 
debugger hits an assertion in some code, it becomes public that "Windows 
checks if a == b". Because that check is a public check, it's visible by 
anyone hitting it.

>In my opinion, the fast call entry code is copied step
>by step from the disassembled Windows code.
I've addressed this already. I think your reaction (to remove your name) 
and to post messages about "honour" was more then excessive and was more 
dramatic then anything. Removing your name from ReactOS does not change 
the fact you wrote that code, and your name would be added back anyways 
as a copyright owner, unless of course you want to make it "Public 
Domain". So unfortunately, I don't see your reaction of removing your 
name as anything else but a PR coup. Even if had the entire code 
actually been copied, you should've at least e-mailed the person 
responsible/project, talked things out and gotten an explanation. I hope 
you don't take this offensively, but I simply think your reaction was 
excessive and dramatic. And the reason I'm saying this is because I've 
had similar reactions in the past in this project, and I've learnt from 
others that they don't achieve much (I would like to thank KJK for this :))

>- Hartmut
Best regards,
Alex Ionescu

PS. I apologize for my lack of presence in the matter. I have re-started 
school and I have almost no time anymore to read emails or participate 
much in ReactOS for the next months, which is why I wanted to finish up 
some commits these last two weeks. For any urgent matters, please email 
me directly (thank you Royce).

More information about the Ros-dev mailing list