Ok, also mal mit WinDbg ran.
Code: Alles auswählen
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
image00400000+dbc001
011bc001 60 pushad
EXCEPTION_RECORD: ffffffff -- (.exr ffffffffffffffff)
ExceptionAddress: 011bc001 (image00400000+0x00dbc001)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000008
Parameter[1]: 011bc001
Attempt to execute non-executable address 011bc001
FAULTING_THREAD: 00000a04
DEFAULT_BUCKET_ID: APPLICATION_FAULT
PROCESS_NAME: image00400000
ERROR_CODE: (NTSTATUS) 0xc0000005 - Die Anweisung in 0x%08lx verweist auf Speicher 0x%08lx. Der Vorgang %s konnte nicht im Speicher durchgef hrt werden.
WRITE_ADDRESS: 011bc001
BUGCHECK_STR: ACCESS_VIOLATION
THREAD_ATTRIBUTES:
LAST_CONTROL_TRANSFER: from 7713db0e to 011bc001
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0013ff98 7713db0e 7ffd6000 73246637 00000000 image00400000+0xdbc001
0013ffdc 7713dae7 00000000 00000000 00000000 ntdll!__RtlUserThreadStart+0x20
0013ffec 00000000 011bc001 7ffd6000 00000000 ntdll!_RtlUserThreadStart+0x1b
FOLLOWUP_IP:
image00400000+dbc001
011bc001 60 pushad
SYMBOL_STACK_INDEX: 0
FOLLOWUP_NAME: MachineOwner
SYMBOL_NAME: image00400000+dbc001
MODULE_NAME: image00400000
IMAGE_NAME: image00400000
DEBUG_FLR_IMAGE_TIMESTAMP: 2a425e19
STACK_COMMAND: ~0s ; kb
FAILURE_BUCKET_ID: ACCESS_VIOLATION_image00400000+dbc001
BUCKET_ID: ACCESS_VIOLATION_image00400000+dbc001
Followup: MachineOwner
Schlüsselzeile ist
Attempt to execute non-executable address 011bc001. Das sollte ja nun schon mal nicht passieren, und schon gar nicht zu Beginn der Programmausführung. Da wir ja eine EXE haben, die funktioniert, vergleichen wir doch einfach mal die betreffenden EXE-Sektionen. Zuerst CAO_FREE.EXE
Code: Alles auswählen
...
OPTIONAL HEADER VALUES
10B magic # (PE32)
2.25 linker version
BD9400 size of code
642200 size of initialized data
0 size of uninitialized data
122C001 entry point (0162C001) <--- entry point
...
SECTION HEADER #9
.aspack name
5000 virtual size
122C000 virtual address (0162C000 to 01630FFF)
4200 size of raw data
475600 file pointer to raw data (00475600 to 004797FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
E0000060 flags
Code
Initialized Data
Execute Read Write
Und nun noch CAO_ADMIN.EXE. Wie man sieht, ist die Adresse 0x011BC01 mit dem pushad-Befehl tatsächlich ziemlich exakt die im EXE-Header genannte Startadresse der EXE (0x011BC000).
Code: Alles auswählen
...
OPTIONAL HEADER VALUES
10B magic # (PE32)
2.25 linker version
747000 size of code
664C00 size of initialized data
0 size of uninitialized data
DBC001 entry point (011BC001)
...
SECTION HEADER #9
.aspack name
5000 virtual size
DBC000 virtual address (011BC000 to 011C0FFF)
4400 size of raw data
373200 file pointer to raw data (00373200 to 003775FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write
Interessant ist hier vor allem, was unter FLAGS steht. Hier nochmal zum Vergleich:
CAO_FRE.EXE (geht):
- Code
- Initialized Data
- Execute Read Write
CAO_ADMIN.EXE (geht nicht):
- Initialized Data
- Read Write
Der Verdacht, daß DEP/NX hier im Spiel ist, liegt also nahe. Und nachdem ich probehalber DEP/NX komplett abgeschalten habe, funktioniert nicht nur der neue CAO_ADMIN, sondern auch meine noch installierte alte Programmversion wieder. Folglich war wohl das zwischenzeitliche Upgrade/Downgrade meiner EMET-Version wohl der Auslöser des Problems und nicht die Windows-August-Updates.
Vielen Dank für ... ach so, ich hab's ja selbst analysiert. Naja egal. Vielen Dank halt. Vielleicht nützt die Info dem Entwickler ja was.