瀏覽代碼

Handle both remapped and ASLR'd Chrome OS kernel mappings

Simon Que 8 年之前
父節點
當前提交
d22c3a31f1
共有 2 個檔案被更改,包括 2 行新增1 行删除
  1. 1
    1
      internal/elfexec/elfexec.go
  2. 1
    0
      internal/elfexec/elfexec_test.go

+ 1
- 1
internal/elfexec/elfexec.go 查看文件

@@ -224,7 +224,7 @@ func GetBase(fh *elf.FileHeader, loadSegment *elf.ProgHeader, stextOffset *uint6
224 224
 			}
225 225
 
226 226
 			return start - loadSegment.Vaddr, nil
227
-		} else if start < loadSegment.Vaddr && start%pageSize != 0 && stextOffset != nil && *stextOffset%pageSize == start%pageSize {
227
+		} else if start%pageSize != 0 && stextOffset != nil && *stextOffset%pageSize == start%pageSize {
228 228
 			// ChromeOS remaps its kernel to 0 + start%pageSize. Nothing
229 229
 			// else should come down this path. Empirical values:
230 230
 			//       start=0x198 limit=0x2f9fffff offset=0

+ 1
- 0
internal/elfexec/elfexec_test.go 查看文件

@@ -60,6 +60,7 @@ func TestGetBase(t *testing.T) {
60 60
 		{"exec chromeos kernel 2", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0, 0x10198, 0, 0x7efffe68, false},
61 61
 		{"exec chromeos kernel 3", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0x198, 0x100000, 0, 0x7f000000, false},
62 62
 		{"exec chromeos kernel 4", fhExec, kernelHeader, uint64p(0xffffffff81200198), 0x198, 0x100000, 0, 0x7ee00000, false},
63
+		{"exec chromeos kernel unremapped", fhExec, kernelHeader, uint64p(0xffffffff810001c8), 0xffffffff834001c8, 0xffffffffc0000000, 0xffffffff834001c8, 0x2400000, false},
63 64
 		{"dyn", fhDyn, nil, nil, 0x200000, 0x300000, 0, 0x200000, false},
64 65
 		{"dyn offset", fhDyn, lsOffset, nil, 0x0, 0x300000, 0, 0xFFFFFFFFFFC00000, false},
65 66
 		{"dyn nomap", fhDyn, nil, nil, 0x0, 0x0, 0, 0, false},