내가 알고 싶습니다? 나는 커널 모듈을 작성 중이며 하나의 특별한 문제를 해결하기 위해 call_func가 직접 호출 된 것처럼 보일 필요가있다. 좀 더 구체적으로 call_func는 시스템 콜입니다. Foo가이 시스템 호출의 제 버전입니다. is_true의 경우, 나는이 일을해야하고,이 시스템 콜을 호출 한 다음 리턴을 리턴해야한다. 하지만! is_true 어떻게 든 호출 스택 자체를 변경하고 싶습니다 - 그래서 현재 수준에서 foo 대신 call_func가있었습니다. 심지어 가능할까요? is_true의GCC 돌아 optimiztion
구현 :
struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
...
}
check_dir 우리가 시스템 콜을 호출 한 디렉토리에 무언가를 수행하려는 경우 기능을 확인하는 것입니다.
- 당신은 할 수 있습니다 Dispatcher의 일종을 구현하지만이 테스트를 수행하는 방법과 그 테스트의 기반에 대해 자세히 설명해야합니다. –
구현을 추가했습니다. 아니면 더 자세한 설명이 필요합니까? –
@PaulR이 언급 한 것처럼 [CPU dispatcher] (https://stackoverflow.com/questions/23676426/disable-avx2-functions-on-non-haswell-processors/23677889#23677889)와 같은 것은 무엇입니까? 처음으로 함수 포인터를'foo'로 설정 한 후'call_func'를 가리 킵니다. 필요하다면 나중에 함수 포인터를 다시'foo'를 가리 키도록 변경할 수 있습니다. –