특정 프로세스의 런타임 코드, GOT, PLT, 스택, 힙, 레지스터 값들을 파일로 저장할 수 있을까요?

ihjkoh의 이미지

실행중인 리눅스 프로세스의 elf 포멧상의 모든 테이블, 코드 및스택, 레지스터 값을 별도의 파일에 저장해놓고, 나중에 불러오기를 해서 저장한 시점부터 다시 재개하여 계속 프로그램을 돌리는 방법을 찾고 있는데, 좋은 수가 없을까요?

bushi의 이미지

https://lwn.net/Articles/478111/
LXC 등의 container 에서 사용할 수 있도록 최근까지 진화된 것이 CRIU 입니다.

ihjkoh의 이미지

runtime state를 저장할 수 있는 리눅스 커널 패치가 있다고 들었는데, 이것과 연관있는거 같아요.
좋은 정보 감사합니다.

사실 제가 만들려는 건 커널소스를 수정하지 않고, 메모리 스냅샷을 찍는 거거든요.
메모리 스냅샷은 스냅샷용 라이브러리를 민든 후, 직접 돌리고자 하는 프로그램의 소스코드에서 이 라이브러리를 call해서 스스로 스냅샷을 찍게 하는 방식으로 하면 가능할거 같아요.
프로그램상의 레지스터 값들, 스택 및 heap 값들도 모두 저장 가능할거 같고요.

그런데 문제는, 스냅샷을 재개할 때, 똑같은 프로그램을 그대로 돌리는게 아니라 바이너리의 GOT, PLT를 약간 수정해야 할 일이 있어요. GOT와 PLT를 수정할 수 있는 어떤 좋은 프로그래밍 라이브러리/툴을 찾고 있는 중인데 혹시 없을지...

bushi의 이미지

라이브러리는 없습니다만 그런 프로그램이 이미 있기는 합니다. gdb 요.
https://sourceware.org/gdb/onlinedocs/gdb/Checkpoint_002fRestart.html

덧.
아예 gcore 라는 유틸도 제공됩니다.

ihjkoh의 이미지

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
https://sourceforge.net/projects/elftoolchain/

단 gdb같이 runtime 용으로 쓰는 건 아니고 정적 elf 파일을 분석하고 수정하는 용도가 대부분인듯 합니다.

코드, 테이블, 스택, heap의 저장방법은 스택포인터, 힙포인터, 코드포인터 등을 기준으로 메모리를 탐색해서 해당 구역을 저장하는 라이브러리를 제작하면 가능할 거 같습니다. 단 해당 라이브러리를 타겟 프로그램 안에서 call해야만 스냅샷 저장이 가능하지만요.

댓글 달기

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