FSOP 강의를 보면, vtable이 section "__libc_IO_vtables" 내에 있는 지를 확인한다고 하여, 이 섹션의 정의를 찾아 보려고 하는 데 glibc 소스코드에 없는 것 같아 질문 드립니다. 해당 섹션의 크기, 위치등 에 관한 정보는 어디에서 찾을 수 있나요? 또한 섹션의 경우 링커나 로더가 참조하는 정보라고 알고 있는 데, ELF 바이너리가 메모리에 로드되는 시점 이후의 활동에서 섹션 정보를 참조할 수 있는 건가요?
jump tables는 https://elixir.bootlin.com/glibc/glibc-2.35/source/libio/libioP.h#L471-L483 에 정의되어 있습니다.
그리고 section 정의는 https://elixir.bootlin.com/glibc/glibc-2.35/source/libio/libioP.h#L900 에서 확인할 수 있습니다.
실제 선언 시에는 https://elixir.bootlin.com/glibc/glibc-2.35/source/libio/wstrops.c#L362 와 같이 libio_vtable을 붙이기 때문에 해당 section에 로드되게 됩니다.
또한 코드는 `__stop_`과 `__start_` prefix를 이용하여 section의 크기를 판단할 수 있으며, 시작 주소도 동일하게 오프셋으로 평가가 가능합니다. IDA에서 실제로 _IO_validate_vtable을 호출하는 시점을 확인해보시면 이해가 편하실 듯 합니다!