x86 CR3 레지스터, 페이지디렉토리 질문

declspec의 이미지

안녕하세요
x86 리눅스 아키텍쳐에서.
커널 페이지디렉토리의 물리주소가 CR3 레지스터에 들어있다고하길래

	int cr3_value = 0;
	asm
	(
	"movl %%cr3, %%eax\n\t"
	"movl %%eax, %0" : "=m" (cr3_value) : : "eax"
	);
 	printk("cr3_value == %X\n", cr3_value);

어떤분이 올려놓으신 소스를 가지고
커널모듈상에서 CR3 레지스터값을 출력해봤습니다
그러니까 0x1FBFD000 뭐 이런값이 나와서
이게 페이지디렉토리의 물리주소 위치인가보다... 했는데

혹시나싶어 모듈을 내렸다가 다시올려보니 위치가 다르게 찍히고, 할때마다 다르게찍히더군요??
어떻게된걸까요? ㅠㅠ

페이징을 해야하니까
CR3 레지스터값은 항상 일정해야하는거아닌가요??

gurugio의 이미지

CR3 레지스터에 주소가 기록된다는것만 규정된다면
페이지 테이블에 접근할 때마다 cr3 레지스터를 읽으면 되니까요.
cr3 레지스터의 값이 동일해야하다면 늘 같은 위치에 페이지 테이블을 저장해야한다는 건데 이게 더 불편할것 같습니다.

참고로 주소 변환할때 레지스터값을 읽어야되므로 비용이 커집니다.
그래서 미리 주소를 변환해놓은 테이블도 있습니다.
캐시도 그렇고 이름은 기억이 안나는데 안보이는 레지스터가 있습니다.
프로세서 메뉴얼에 그림으로 설명되어있었던걸로 기억이 납니다.

declspec의 이미지

해결되었습니다.

알고봤더니 커널모듈상의 코드가 커널레벨에서 실행되긴 해도
몇몇 레지스터의 컨텍스트는 해당 커널모듈의 루틴을 호출한 유저레벨 프로세스의 컨텍스트를
가지고가더군요

그래서 CR3 레지스터가 insmod 프로그램의 것이 찍힌것이어서
매번 달랐던 것이었습니다

자기실력이 좋다고 느껴지는건 공부를 안하고 있다는 신호.

gurugio의 이미지

아 모듈로 올리면 insmod 프로그램의 프로세스 컨텍스트를 가지는 거였군요.
그럼 커널에 링크해서 실행시키면 항상 동일한 cr3 값을 가질 것이구요.
좋은걸 배웠습니다. 감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.