내가 존 에릭슨의 책, Hacking: The Art of Exploitation에서이 소스를 발견 작성, 시스템 호출을 쓰기는 C, INT
userid = getuid(); // get the real user ID
// Writing data
if(write(fd, &userid, 4) == -1) // write user ID before note data
fatal("in main() while writing userid to file");
write(fd, "\n", 1); // terminate line
나는 무엇 인 (이 코드를 컴파일하려고 내가 쓰는 파일, 사용자 ID에 그 발견 위의 코드에서 작성))가 올바르지 않습니다. 그들은 단지 이상한 성격을 썼다 (나는 여기에 그것을 쓰는 것이 중요하지 않다고 생각한다). 그래서 문제는
int
을 쓸 함수의 결과가
char *
인 것으로 전달하려고하기 때문에 쓰려는 파일의 결과가 false이기 때문입니다.
버그입니다. 맞습니까?
'write (fd, & userid, 4)'는 이진 표현을 파일에 씁니다. 텍스트 편집기가 그것을 이해하지 못합니다. –
'man write' (또는 google it)을 사용하십시오. 'write' 시스템 호출은'char *'가 아닌'const void *'를 사용합니다. 이것은 정수가 아닌 이진 표현 (정수가 char로 인코딩되지 않음)과 관련된 문제입니다. – RageD