FRIDA Native함수 float형 인자값 설정

홈 > 커뮤니티 > 질문 게시판
질문 게시판

FRIDA Native함수 float형 인자값 설정

4 py0zz1 3 4223
void exam(float a);

위와 같은 Native함수를 후킹해서 인자값 a를 바꾼다고 했을 때, 후킹 스크립트를 어떻게 작성해야 할까요?
아래는 제가 했던 시도들 입니다.

1.
Interceptor.attach(exam, function()
{
    onEnter: function(args)
    {
        args[0] = ptr("0");
    }
});

2.
Interceptor.attach(exam, function()
{
    onEnter: function(args)
    {
        args[0].writeFloat(0.0);
    }
});

그리고 다른 자료형들과는 달리 float형은 메모리에 좀 다르게 올라오는 것 같더라구요.

args[0]를 hexdump()로 확인해보면 값이 아니라 포인터가 저장되어 있습니다.
해당 포인터를 타고 타고 확인해봐도 값으로 보이는 데이터가 보이지 않네요..

조언 부탁드립니다.
3 Comments
1 마카롱맨 2020.03.03 23:31  
1. 함수 호출시에 float 자료형은 값이 복사되서 전달됩니다. 그러니까 아무리 호출함수 내부에서 인자의 값을 바꿔도 함수 밖에서 확인하면 그대로입니다. 예를 들면 함수 호출할 때 인자로 a라는 변수를 주었다면, a의 값이 인자에 복사가 되어 전달이 되고, a의 원본은 영향을 받지 않습니다. 이런 방식을 call by value라고 부릅니다. 전달한 인자가 함수 내부의 행동에 영향을 받게 만들고 싶다면 call by reference 방식을 택해야 하고, 포인터 변수를 넘기는 게 대표적인 방법입니다. 2. 포인터가 저장된 게 아니라 float 자료형은 계산방식이 달라서 int 형과는 다르게 보입니다. 부동소수점 계산 방식은 검색을 해보시면 잘 나올 겁니다.
4 py0zz1 2020.03.08 05:03  
아 call by value는 그렇게 되는군요..
답변 감사합니다!
3 땅아아땅 2020.03.16 21:32  
도움이 많이 되었습니다!