1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/usr/bin/env python3
# native address metadata grows without losing warm translations or rewrite tracking.
import subprocess
import sys
source = '''o3 int warmed(int value) { return value + 1; }
fn main() {
put_n(warmed(6)); put_c(32);
let code = new(6);
code[0] = code + 3; code[3] = 8; code[4] = 15; code[5] = 18;
put_n(syscall(9, 9, code + 6, 0) >= code + 6); put_c(32);
put_n(code()); put_c(32);
fill_w(code + 4, 19, 1); put_n(code()); put_c(32);
let replacement = new(1); replacement[0] = 23;
copy_w(code + 4, replacement, 1); put_n(code()); put_c(32);
gc(); put_n(warmed(8)); put_c(32);
put_n(syscall(9, 9, syscall(9, 0, 0, 0) + 1, 0) == -1); put_c(10);
return 0;
}
'''
result = subprocess.run(sys.argv[1:], input=source, text=True, capture_output=True, timeout=20)
assert result.returncode == 0 and result.stdout == '7 1 7 9 11 9 1\n', (result.returncode, result.stdout, result.stderr)
print('ok new code addresses, warm calls, bulk rewrites, and denied metadata growth')
|