리눅스 커널 2.6.14.6 에서 데이터섹션의 execute 와 관련하여....

criny333의 이미지

일단 소스는 다음과 같습니다.
**********************************
char cmd[] = "\x55\x5d\xc3";

main(){
(void) (*fun)(void);
fun = cmd;
fun();
}
**********************************

이 소스가 커널 2.6.14.6 에서는 실행이 됩니다...물론 그 상위 버전 커널에서는 실행이 안되구요...
소스 내용이 데이터섹션으로 eip를 옮겨서 데이터섹션 영역 코드를 실행하는 것인데...
2.6.14.6 해당 커널에서 위 프로그램을 프로세스로 만들고 pmap을 통해서 가상메모리 설정을 살펴보면
cmd 전역데이터가 위치하는 데이터섹션 페이지의 읽기/쓰기 권한은 "rw--"로 나옵니다. "x" 옵션이 없기에 실행이 안되어야 정상인데 말이죠...

무엇이 문제일까요... 커널 버그일까요...? /proc/"PID"/maps 를 읽어올때 분명히 프로세스구조체에서 vm_list를 직접참조하여 읽어 올텐데 말이죠....

익명 사용자의 이미지

혹시 2.6.14.6 을 어떤식으로 설치하셨는지 알 수 있을까요?
어떤 특정 배포판 버전을 설치하신건지 직접 커널 컴파일 하신건지.

criny333의 이미지

구버전 데비안을 사용하였고, 커널 자체는 따로 컴파일 하여 사용하였습니다.

익명 사용자의 이미지

제가 방금 직접 커널 컴파일해서 실행을 해보았습니다만 예상했듯이 실행이 되지 않습니다.(SIGSEGV)
물론 maps 파일의 내용만을 믿으면 안될 것이, http://passket.tistory.com/ 에 나와있듯이 이러한 경우도
분명히 존재하기 때문에 확실한 것은 아니나 지금 겪으신 문제는 이것과는 관련이 없어 보입니다.

만약 현재 리눅스를 VM 에서 실행하고 계시다면 VM 이미지라도 받아서 해보고 싶네요.

criny333의 이미지

메일 주소를 가르켜 주신다면 네이버 대용량 첨부기능 사용하여서 버츄얼박스 머신 세팅파일과 vdi 가상하드파일 보내드리겠습니다.

익명 사용자의 이미지

whitehkchoi@gmail.com 으로 보내주세요.

criny333의 이미지

매일 보내드렸습니다.

익명 사용자의 이미지

전송이 안된 것 같습니다. 아무것도 오지 않았습니다.

criny333의 이미지

다시 보냈습니다.
whitehkchoi@gmail.com

감사합니다.

익명 사용자의 이미지

확인 해 본 결과 이 문제 역시 제가 위에 얘기한 http://passket.tistory.com/ 에 있는 내용과
동일한 현상으로 생각됩니다. 이 부분의 경우 저도 아직 정확한 원인 파악을 못하였고 계속 알아보는 중입니다.

현재 이 버전대의 커널에서는 라이브러리 영역 뿐 아니라 바이너리 영역까지 전부 실행 권한이 존재하고
조금 더 높아지는 2.6.35 정도(Ubuntu 10.10 기준) 에서는 바이너리 영역엔 실행 권한이 없지만
라이브러리 영역에는 여전히 실행 권한이 존재합니다.
(위에서 얘기한 것은 모두 maps 상으로는 실행 권한이 없는 것처럼 보입니다.)

그리고 그보다 더 최근 커널에서는 이제 라이브러리 영역도 실행 권한이 없고 maps 와 차이가 별로 없습니다.
저도 아직 왜 이런지는 잘 모르겠습니다.

http://stackoverflow.com/questions/24202190/why-is-it-that-librarys-memory-area-is-executablenot-nx-on-ubuntu-10-10
이런 질문도 올려보았으나 딱히 답변이 없는 상황이라 좀 더 알아봐야 할 것 같습니다.

답변을 기대하셨다면 죄송합니다.

criny333의 이미지

아닙니다. 많은 도움이 되었습니다. 답변 감사합니다.
해당 버전의 /proc/"PID"/maps 가상 파일시스템 부분 코드와 프로세스 가상 페이지 테이블 구성하는 커널 코드를 살펴본 뒤 답 찾으면 저도 답변 달겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.