나는 읽었다여기이것:
Falco는 커널 모듈에 의존합니다.머신에서 시스템 호출 흐름을 입력합니다.이러한 시스템 호출을 사용자 공간에 전달합니다.
(강조).
이는 임의의 프로세스에서 임의의 명령 호출을 기록할 수 있는 가능성을 암시합니다(정확하지는 않지만). 이것이 어떻게 수행되는지 알고 싶습니다.
누군가 나에게 ptrace/strace/dtrace/gdb(저는 Mac을 사용하고 있습니다)를 추천했지만, 해당 커널 모듈을 작성하면 어떤 저수준(아마도 커널 수준) 기능이 기록되는지 궁금합니다.어느프로세스가 이미 내 컴퓨터의 백그라운드에서 실행 중입니다. ps
실행 중인 프로세스를 나열하고 업데이트된 프로세스 패널과 일부 통계를 유지하는 것과 같은 방식으로 top
기본적으로 프로세스를 완전히 제어하고 싶습니다. 즉, 주어진 경우 pid 123
프로그램의 한 단계를 실행 pause 123
하거나 일시 중지하거나 실행 step 123
한 다음 inspect 123
컴퓨터의 전체 메모리 레이아웃을 살펴보고 메모리에 어떤 변화가 발생했는지 확인합니다. 이 모든 것은 ptrace/dtrace/strace/gdb 없이 이루어집니다.
이것은 아마도 광범위한 주제일 것입니다. 그러나 저는 더 많은 정보를 찾을 수 있는 올바른 영역을 지적하고 싶었습니다. 구체적으로는 그럴 가능성이 높다.커널 모듈, 이를 통해 커널 API에 의해 노출된 일부 기능에 액세스합니다. 이것이 기술적으로 가능한지 잘 모르겠습니다(프로세스를 관찰하십시오).밖에서, 언제든지 평가를 제어합니다) 또는어느일부는 가능합니다. 먼저 이 중 어떤 부분이 가능/불가능한지 알고 싶고, 자세한 정보는 어디서 찾을 수 있는지 알고 싶습니다.
내가 본 몇몇 튜토리얼에서는 에서와 같이 gdb
프로그램/스크립트를 직접 실행/호출하기를 원했습니다 . 이것이 단계/일시 중지 등에 액세스하는 방법의 핵심입니다. 프로그램 행동. 하지만 나는 한 단계 더 나아가고 싶다. 프로그램을 호출하기 위해 프로그램(예: gdb)을 요구하는 대신gdb
gdb myscript
곧장, 대신 다음과 같이 작동합니다프로그램에 첨부이미 실행 중백그라운드에서. 그런 다음 프로그램에 추가하십시오.밖에서, 일시 중지/단계/확인/등을 허용합니다. 이것이 가능한지 확실하지 않습니다. 하지만 이 방법을 사용하면 내 컴퓨터가 수행하는 데몬과 기타 작업을 처음부터 확인할 수 있습니다.
답변1
gdb는 당신이 설명하는 것과 정확히 일치합니다. 다음 명령을 사용하여 실행 중인 프로세스 123에 연결할 수 있습니다.
$ gdb -p 123
또는 실행 파일의 경로를 전달하십시오.
$ gdb /path/to/program 123
당신은 그것을 사용할 수 있습니다첨부된gdb 프롬프트의 명령은 동일한 효과를 갖습니다.
gdb는 이미 연결된 프로세스의 메모리를 일시 중지하고 단계별로 검사하고 검사할 수 있기 때문에 설명하는 모든 작업을 수행하는 것 같습니다(심지어 메모리 내용 수정과 같은 추가 작업도 수행할 수 있습니다).
gdb에서 사용되는 저수준 커널 기능은 다음과 같습니다.트랙(2)(참고로 드래곤도 있습니다!) 따라서 gdb와 유사하지만 어떤 면에서는 다른 것을 원한다면 이를 달성하기 위해 ptrace를 사용하는 것을 고려할 수 있습니다.
새로운 커널 인터페이스를 개발하는 것은 확실히 이루어질 수 있지만 이것이 무엇을 제공할지는 확실하지 않으며 ptrace는 여전히 제공하지 않습니다... 이러한 기능에 필요한 후크는 아마도 커널에 상당히 방해가 될 수 있으므로 많은 작업이 필요할 것입니다. ptrace와 유사한 것을 생성하기 위해 커널 소스 트리를 패치합니다(간단한 로드 가능한 커널 모듈에서는 수행될 가능성이 낮음).
간단히 말해서, gdb와 ptrace는 설명된 대로 수행됩니다. 이 도구와 시스템 호출에 대한 대체 도구를 개발할 수는 있지만 그렇게 하는 이유가 무엇인지는 확실하지 않습니다.