diff options
| author | ov-4 <hausemasterstream@gmail.com> | 2026-01-20 14:31:20 +0000 |
|---|---|---|
| committer | ov-4 <hausemasterstream@gmail.com> | 2026-01-20 14:31:20 +0000 |
| commit | 9d4a7d1c07d3ce894c7ed3454ab73d31a0334d83 (patch) | |
| tree | 73306c4be8cc5145c9d4f4bba04aced55a881e47 /bomblab/phase4.asm | |
| parent | aacbd334c3204f4abc5921a7e6a2bea485b1f371 (diff) | |
Updated solution
Diffstat (limited to 'bomblab/phase4.asm')
| -rw-r--r-- | bomblab/phase4.asm | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/bomblab/phase4.asm b/bomblab/phase4.asm new file mode 100644 index 0000000..f0c5a85 --- /dev/null +++ b/bomblab/phase4.asm @@ -0,0 +1,43 @@ +# OBJDUMP +0000000000400fce <func4>: + 400fce: 48 83 ec 08 sub $0x8,%rsp + + 400fd2: 89 d0 mov %right,%range + 400fd4: 29 f0 sub %left,%range + 400fd6: 89 c1 mov %range,%mid + 400fd8: c1 e9 1f shr $0x1f,%mid + 400fdb: 01 c8 add %mid,%range + 400fdd: d1 f8 sar $1,%range + 400fdf: 8d 0c 30 lea (%range,%left,1),%mid + 400fe2: 39 f9 cmp %input,%mid + # range = right - left + # mid = left + (range/2) + + + 400fe4: 7e 0c jle 400ff2 <func4+0x24> # if (mid > input), left part + + # left part + # [left, mid-1] + 400fe6: 8d 51 ff lea -0x1(%mid),%right # right = mid - 1 + 400fe9: e8 e0 ff ff ff call 400fce <func4> + 400fee: 01 c0 add %range,%range # range = 2 * range + 400ff0: eb 15 jmp 401007 <func4+0x39> + + # right part + # [mid+1, right] + 400ff2: b8 00 00 00 00 mov $0x0,%range + 400ff7: 39 f9 cmp %input,%mid + 400ff9: 7d 0c jge 401007 <func4+0x39> # if (mid >= input) ret + 400ffb: 8d 71 01 lea 0x1(%mid),%left # left = mid + 1 + 400ffe: e8 cb ff ff ff call 400fce <func4> + 401003: 8d 44 00 01 lea 0x1(%range,%range,1),%range # range = 2*range + 1 + + 401007: 48 83 c4 08 add $0x8,%rsp + 40100b: c3 ret # ret range (eax) + + +# all caller saved +# range --- eax +# left --- esi +# right --- edx +# input --- rdi (constant) |
