Any idea please ? Been stuck at this for quite some time, seems that Go is 
neglecting the return uintptr(handler.EXCEPTION_CONTINUE_SEARCH) and going 
into panic mode ...


Le vendredi 17 janvier 2025 à 16:30:24 UTC+1, rudeus greyrat a écrit :

>
> https://stackoverflow.com/questions/79365198/cannot-continue-after-entering-vectored-exception-handler-in-go
>
> asked the question here too if people want to have syntax highlight
>
> Le vendredi 17 janvier 2025 à 14:16:30 UTC+1, rudeus greyrat a écrit :
>
>> PS: I know there is defer recover mechanism in Go that can be used to 
>> handle exception... But I would like to use AddVectoredExceptionHandler 
>> (maybe it is already used behind the scene with defer recover ?) because I 
>> can inspect the thread context in myhandler function
>>
>> Le vendredi 17 janvier 2025 à 13:17:07 UTC+1, rudeus greyrat a écrit :
>>
>>> I want to be able to catch windows exception and do stuff with it 
>>> (mainly for hardware break point later).
>>>
>>> I created a custom function to add a Vectored Exception Handler using 
>>> the windows API call AddVectoredExceptionHandler:
>>> ```
>>> func AddVEH(myHandler PVECTORED_EXCEPTION_HANDLER) error {
>>>     kernel32 := syscall.NewLazyDLL("kernel32.dll")
>>> addVectoredExceptionHandler := 
>>> kernel32.NewProc("AddVectoredExceptionHandler")
>>>
>>>     
>>> _, _, err := addVectoredExceptionHandler.Call(
>>> uintptr(1),
>>> syscall.NewCallback(func(exceptionInfo *EXCEPTION_POINTERS) uintptr {
>>> return myHandler(exceptionInfo)
>>> }),
>>> )
>>>     if err != nil {
>>>         fmt.Println("Error Setting the VEH")
>>>         fmt.Println(err.Error())
>>>     }
>>>     return err
>>> }
>>> ```
>>>
>>> I test it with a custom exception I raise:
>>> ```
>>> func myHandler(exceptionInfo *handler.EXCEPTION_POINTERS) uintptr {
>>> println("Exception occurred! ---> Code")
>>> println(exceptionInfo.ExceptionRecord.ExceptionCode)
>>> println("It happends in life, lets continue")
>>> return ^uintptr(0) // EXCEPTION_CONTINUE_EXECUTION = -1
>>> }
>>>
>>> func main() {
>>> handler.AddVEH(myHandler)
>>>
>>> raiseCustomException() // Just Raises a custom EXCEPTION with 
>>> RaiseException winapi and code 0xE0000001
>>>
>>> println("Continued")
>>> }
>>> ```
>>>
>>> As I return with EXCEPTION_CONTINUE_EXECUTION, I expect that 
>>> `println("Continued")` will be executed. However, it is not the case at all:
>>> ```
>>> Error Setting the VEH
>>>     The operation completed successfully.
>>> Exception occurred! ---> Code
>>> 3758096385
>>> It happends in life, lets continue
>>> Exception 0xe0000001 0x7eb71d5fb17c 0x1b 0x7ffc54e4b699
>>> PC=0x7ffc54e4b699
>>>
>>> runtime.cgocall(0xf1dde0, 0xc000049b30)
>>>         runtime/cgocall.go:167 +0x3e fp=0xc00006fe28 sp=0xc00006fdc0 
>>> pc=0xf10a7e
>>> syscall.SyscallN(0xc00001e410?, {0xc0000121c0?, 0x0?, 0xf39a00?})
>>> ```
>>>
>>> As you see the program enter the handler function but never continues, 
>>> rather it exit and print the stack trace... 
>>>
>>> Not sure if it is because of syscall.NewCallback or something else ...
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/1e4d6586-7eaa-42fe-abb7-53216e12d154n%40googlegroups.com.

Reply via email to