You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thread 2.1 "d8" hit Breakpoint 5, 0x00007ffff772ee24 in Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit () from /home/m/git/v8/v8/out.gn/x64.debug/./libv8.so
$1 = 0x7fffffffcac8
앞에서 본 문제가 발생하는 것을 막기 위해 심플한 검증 로직을 추가하여,
RET에 주소가 실행가능한 영역이 아닌 경우에는 복귀주소 후킹을 하지 못하도록
코드를 추가했다.
하지만 이런 검증 로직에도 불구하고 여전히 문제가 발생하는데,
이 또한 역시 v8의 interpreting 로직의 특수성 때문이다.
문제가 발생하는 곳은 다음의 함수이다.
설명에 앞서 rcx에 적재되는 값의 주소는
0x7fffffffcac8 + 0x8 = 0x7fffffffcad0 이다.
왜 문제가 발생하는지 설명하자면,
이곳에서 복귀주소를 읽어,
다음 명령을 통해
stack에 push하고 return한다.
이 때 call stack은 uftrace에 의해 hooking 된 주소가 들어가 있다.
호출은 Builtins_InterpreterEntryTrampoline -> Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit 순으로 이뤄지며, Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit 함수에서는 Builtins_InterpreterEntryTrampoline 의 리턴주소를 읽어들여 stack에 push하고 리턴하게 된다.
이것은 동일한 함수에서 이뤄지기 때문에, uftrace 입장에서는 정상적인 동작이나 v8에서는 그렇지 않다.
The text was updated successfully, but these errors were encountered: