Windows error 0x000001C4, 452

Detailed Error Information

CAPAUTHZ_NOT_PROVISIONED[1]

MessageThe application has not been provisioned.
Declared inwinerror.h

This appears to be a raw Win32 error. More information may be available in error 0x800701C4.

DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP[2]

This is a Blue Screen of Death stop code. More information is available in the Knowledge Base article Bug Check 0x1C4: DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP.

HRESULT analysis[3]

This is probably not the correct interpretation of this error. The Win32 error above is more likely to indicate the actual problem.
FlagsSeveritySuccess

This code indicates success, rather than an error. This may not be the correct interpretation of this code, or possibly the program is handling errors incorrectly.

Reserved (R)false
OriginMicrosoft
NTSTATUSfalse
Reserved (X)false
FacilityCode0 (0x000)
NameFACILITY_NULL[3][1]
DescriptionThe default facility code.[3][1]
Error Code452 (0x01c4)

Possible solutions

3

Switch case's jump table position within code on ARM

c
arm
reverse-engineering
compiler-optimization
jump-table

Mainly this has to do with RISC vs CISC philosophy. On the ARM the PC is almost a general purpose register. You can see that with add r2, pc, #4; this puts the address of the table in r2. Since the table is loaded via the PC, it needs to go with the code. A simpler switch is possible,

     ldr     r1, [r1, pc]  ; get table data via 'pc'
     add     pc, r1        ; do switch
table: 
     .word offset_first_case ; ... etc.

The above is completely PC relative. It looks like your code might need a relocation. If the case code is highly symmetric, a table might not even be needed just pc += case * case_code_size.

Some ARM CPUs support instructions like xlat and a switch/case implementation may depend on the compiler, target ARM/x86 CPU, the data type and the density of the cases. For instance, the table might contain 'case,case_offset' and be sorted so a binary search is performed in the 'sparse case' case.


Note: The ARM pc is two instructions (eight bytes) ahead due to the original ARM pipeline size. ARM maintains this offset when using the PC in order to stay compatible.

answered on Stack Overflow Jun 1, 2016 by artless noise • edited Jun 1, 2016 by artless noise

Comments

Leave a comment

(plain text only)

Sources

  1. winerror.h from Windows SDK 10.0.14393.0
  2. https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-code-reference2
  3. https://msdn.microsoft.com/en-us/library/cc231198.aspx

User contributions licensed under CC BY-SA 3.0