The problem isn't that BytesWritten is not a pointer, it
is that you don't have it pointing to any valid location
which is why the crash in WriteFile().
--Chris
On 1/10/2016 07:31, Ben Hutchinson wrote:
When I try to compile this:
#include <windows.h>
int _start(void){
unsigned char MyArray[4];
LPDWORD BytesWritten;
HANDLE hFile;
hFile=CreateFile("MyFile.dat",0xC0000000,0,0,2,0,0);
MyArray[0]=1;
MyArray[1]=2;
MyArray[2]=3;
MyArray[3]=4;
WriteFile(hFile,MyArray,4,BytesWritten,0);
CloseHandle(hFile);
}
I get a program that crashes when I run it. When I look at the
dissassembly in OllyDbg, it turns out that what's happening is that in
the WriteFile line of code, it's passing the value stored in
BytesWritten, rather than its memory address, even though BytesWritten
has been declared with LPDWORD, and even though LPDWORD has by defined
(via typedef) as a pointer. When a pointer type variable is passed it
should be passing the memory address, not the value stored there, but
passing the value stored there is EXACTLY what's happening. The ONLY
time that the value stored at a pointer should be passed is when you
prefface that pointer with an asterisk. If I have a variable declared
like this:
LPDWORD MyPtr
Every time I use that pointer, including passing it as a parameter in
a function as just MyPtr, it SHOULD be passing the memory address, not
the value stored there. The ONLY time that it should it should be
using the value stored in a pointer-type variable there is if I am
using an astrisk with it, like this:
*MyPtr
As you can see from the above code sample, my pointer-type variable is
being passed in such a way that it should be passing the ADDRESS to
the function, NOT passing the value, yet passing the value is exactly
what's happening, as I can tell by running the program in a debugger.
This is a MAJOR glitch. It's what I call a "show stopper" glitch. It
is significant enough that it will prevent you from from writing any
decent program in TCC. I only wish the author of this software didn't
stop updating it back in 2013. There's still quite a few bugs that are
still NOT FIXED.
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel