Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opnd_compute_address() does not use app segment values #527

Closed
derekbruening opened this issue Nov 28, 2014 · 1 comment
Closed

opnd_compute_address() does not use app segment values #527

derekbruening opened this issue Nov 28, 2014 · 1 comment

Comments

@derekbruening
Copy link
Contributor

From [email protected] on August 04, 2011 14:10:33

after issue #495 was fixed I tried Dr. Memory with the linux private loader but there's another problem in the way:

new thread #0 id=26199
in event_thread_init()
fs base=0x19e25000, gs base=0x19e29940

TAG 0xf77940db
+0 L3 65 8b 0d 0c 00 00 00 mov %gs:0x0c -> %ecx
+7 L3 85 c9 test %ecx %ecx
+9 L3 0f 85 f1 00 00 00 jnz $0xf77941db
END 0xf77940db

whole-bb scratch: r1 =%edx spill#0 x0, r2 =%eax spill#1 x0
fastpath: mov %gs:0x0c -> %ecx | prop=1 srcsz=4 dstsz=4 checkdef=0 markdef=0 checkunaddr=0
fastpath: test %ecx %ecx | prop=2 srcsz=4 dstsz=4 checkdef=1 markdef=0 checkunaddr=0
whole-bb scratch: r1 =used, r2 =used, efl=unused

slow_path 0xf77940db: mov %gs:0x0c -> %ecx
memref: read @0xf77940db 0x19e2994c 0x4 bytes (pre-dword 0x55 0x55) (was special)
WARNING: unknown region 0x19e29000-0x19e2a000: marking as defined
FATAL ERROR: ASSERT FAILURE (thread 26199): /home/bruening/drmemory/git/src/drmemory/alloc_drmem.c:1937: !dr_memory_is_dr_internal(addr) && !dr_memory_is_in_client(addr) (app is using tool's memory: please report this!)

(gdb) p /x * heapmgt
$2 = {vmheap = {start_addr = 0x19dd4000, end_addr = 0x21dd4000, alloc_start = 0x0, alloc_size = 0x8000000, num_blocks = 0x2000,

Dr. Memory computes the segment bases at startup via:
byte *gs_base =
opnd_compute_address(opnd_create_far_base_disp(SEG_GS, REG_NULL, REG_NULL,
0, 0, OPSZ_lea), &mc);

a related question is do we need this to do anything for linux:
/* Restore app's PEB and TEB fields (issue #248) */
dr_switch_to_app_state(drcontext);
conclusion is we don't need it for linux though since there is no swapping:
the private stuff is all separate and is all in DR memory (uses heap_mmap)

dr_insert_get_seg_base() is doing the right thing

so it looks like it's just opnd_compute_address()

Original issue: http://code.google.com/p/dynamorio/issues/detail?id=527

@derekbruening
Copy link
Contributor Author

From [email protected] on August 14, 2011 08:27:10

Status: Fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant