From 282681c729857026e3713d45e9027fdfccda0880 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sat, 31 Aug 2019 23:22:49 -0700 Subject: 5600 --- html/apps/tests.subx.html | 538 +++++++++++++++++++++++----------------------- 1 file changed, 270 insertions(+), 268 deletions(-) (limited to 'html/apps/tests.subx.html') diff --git a/html/apps/tests.subx.html b/html/apps/tests.subx.html index 38b7e3c6..c1dc59f0 100644 --- a/html/apps/tests.subx.html +++ b/html/apps/tests.subx.html @@ -69,277 +69,279 @@ if ('onhashchange' in window) { 9 # . op subop mod rm32 base index scale r32 10 # . 1-3 bytes 3 bits 2 bits 3 bits 3 bits 3 bits 2 bits 2 bits 0/1/2/4 bytes 0/1/2/4 bytes 11 - 12 Entry: - 13 # Heap = new-segment(Heap-size) - 14 # . . push args - 15 68/push Heap/imm32 - 16 68/push Heap-size/imm32 - 17 # . . call - 18 e8/call new-segment/disp32 - 19 # . . discard args - 20 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - 21 # initialize-trace-stream(256KB) - 22 # . . push args - 23 68/push 0x40000/imm32/256KB - 24 # . . call - 25 e8/call initialize-trace-stream/disp32 - 26 # . . discard args - 27 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp - 28 - 29 # run tests if necessary, convert stdin if not - 30 # . prolog - 31 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp - 32 # initialize heap + 12 Entry: # run tests if necessary, convert stdin if not + 13 # . prolog + 14 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp + 15 + 16 # initialize heap + 17 # . Heap = new-segment(Heap-size) + 18 # . . push args + 19 68/push Heap/imm32 + 20 68/push Heap-size/imm32 + 21 # . . call + 22 e8/call new-segment/disp32 + 23 # . . discard args + 24 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp + 25 # initialize-trace-stream(256KB) + 26 # . . push args + 27 68/push 0x40000/imm32/256KB + 28 # . . call + 29 e8/call initialize-trace-stream/disp32 + 30 # . . discard args + 31 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp + 32 33 # - if argc > 1 and argv[1] == "test", then return run_tests() - 34 # . argc > 1 + 34 # if (argc <= 1) goto run-main 35 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp 36 7e/jump-if-lesser-or-equal $run-main/disp8 - 37 # . argv[1] == "test" - 38 # . . push args - 39 68/push "test"/imm32 - 40 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) - 41 # . . call - 42 e8/call kernel-string-equal?/disp32 - 43 # . . discard args - 44 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - 45 # . check result - 46 3d/compare-eax-and 1/imm32 - 47 75/jump-if-not-equal $run-main/disp8 - 48 # . run-tests() - 49 e8/call run-tests/disp32 - 50 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/ebx Num-test-failures/disp32 # copy *Num-test-failures to ebx - 51 eb/jump $main:end/disp8 - 52 $run-main: - 53 # - otherwise convert stdin - 54 # convert(Stdin, Stdout) - 55 # . . push args - 56 68/push Stdout/imm32 - 57 68/push Stdin/imm32 - 58 # . . call - 59 e8/call convert/disp32 - 60 # . . discard args - 61 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp - 62 # . syscall(exit, 0) - 63 bb/copy-to-ebx 0/imm32 - 64 $main:end: - 65 b8/copy-to-eax 1/imm32/exit - 66 cd/syscall 0x80/imm8 - 67 - 68 convert: # in : (address buffered-file), out : (address buffered-file) -> <void> - 69 # pseudocode - 70 # bool tests-found = false - 71 # var line = new-stream(512, 1) - 72 # var new-code-segment = new-stream(Segment-size, 1) - 73 # write(new-code-segment, "\n==code\n") - 74 # write(new-code-segment, "run-tests:\n") - 75 # while true - 76 # clear-stream(line) - 77 # read-line-buffered(in, line) - 78 # if (line->write == 0) break # end of file - 79 # var word-slice = next-word(line) - 80 # if is-label?(word-slice) - 81 # if slice-starts-with?(word-slice, "test-") - 82 # tests-found = true - 83 # write(new-code-segment, " e8/call ") - 84 # write-slice(new-code-segment, word-slice) - 85 # write(new-code-segment, "/disp32\n") - 86 # rewind-stream(line) - 87 # write-stream-data(out, line) - 88 # if tests-found - 89 # write(new-code-segment, " c3/return\n") - 90 # write-stream-data(out, new-code-segment) - 91 # flush(out) - 92 # - 93 # . prolog - 94 55/push-ebp - 95 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp - 96 # . save registers - 97 50/push-eax - 98 51/push-ecx - 99 52/push-edx -100 53/push-ebx -101 57/push-edi -102 # var line/ecx : (address stream byte) = stream(512) -103 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x200/imm32 # subtract from esp -104 68/push 0x200/imm32/length -105 68/push 0/imm32/read -106 68/push 0/imm32/write -107 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx -108 # var word-slice/edx = {0, 0} -109 68/push 0/imm32/end -110 68/push 0/imm32/start -111 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . . # copy esp to edx -112 # tests-found?/ebx = false -113 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx -114 # new-code-segment/edi = new-stream(Heap, Segment-size, 1) -115 # . eax = new-stream(Heap, Segment-size, 1) -116 # . . push args -117 68/push 1/imm32 -118 ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Segment-size/disp32 # push *Segment-size -119 68/push Heap/imm32 -120 # . . call -121 e8/call new-stream/disp32 -122 # . . discard args -123 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp -124 # . edi = eax -125 89/copy 3/mod/direct 7/rm32/edi . . . 0/r32/eax . . # copy eax to edi -126 # write(new-code-segment, "\n== code\n") -127 # . . push args -128 68/push "\n== code\n"/imm32 -129 57/push-edi -130 # . . call -131 e8/call write/disp32 -132 # . . discard args -133 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -134 # write(new-code-segment, "run-tests:\n") -135 # . . push args -136 68/push "run-tests:\n"/imm32 -137 57/push-edi -138 # . . call -139 e8/call write/disp32 -140 # . . discard args -141 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -142 $convert:loop: -143 # clear-stream(line) -144 # . . push args -145 51/push-ecx -146 # . . call -147 e8/call clear-stream/disp32 -148 # . . discard args -149 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -150 # read-line-buffered(in, line) -151 # . . push args -152 51/push-ecx -153 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) -154 # . . call -155 e8/call read-line-buffered/disp32 -156 # . . discard args -157 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -158 $convert:check0: -159 # if (line->write == 0) break -160 81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx -161 0f 84/jump-if-equal $convert:break/disp32 -162 # next-word(line, word-slice) -163 # . . push args -164 52/push-edx -165 51/push-ecx -166 # . . call -167 e8/call next-word/disp32 -168 # . . discard args -169 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -170 $convert:check-for-label: -171 # if (!is-label?(word-slice)) continue -172 # . eax = is-label?(word-slice) -173 # . . push args -174 52/push-edx -175 # . . call -176 e8/call is-label?/disp32 -177 # . . discard args -178 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -179 # . if (eax == 0) continue -180 3d/compare-eax-and 0/imm32 -181 74/jump-if-equal $convert:continue/disp8 -182 $convert:check-label-prefix: -183 # strip trailing ':' from word-slice -184 ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4) -185 # if !slice-starts-with?(word-slice, "test-") continue -186 # . . push args -187 68/push "test-"/imm32 -188 52/push-edx -189 # . . call -190 e8/call slice-starts-with?/disp32 -191 # . . discard args -192 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -193 # . if (eax == 0) break -194 3d/compare-eax-and 0/imm32 -195 74/jump-if-equal $convert:continue/disp8 -196 $convert:call-test-function: -197 # tests-found? = true -198 bb/copy-to-ebx 1/imm32/true -199 # write(new-code-segment, " e8/call ") -200 # . . push args -201 68/push " e8/call "/imm32 -202 57/push-edi -203 # . . call -204 e8/call write/disp32 -205 # . . discard args -206 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -207 # write-slice(new-code-segment, word-slice) -208 # . . push args -209 52/push-edx -210 57/push-edi -211 # . . call -212 e8/call write-slice/disp32 -213 # . . discard args -214 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -215 # write(new-code-segment, "/disp32\n") -216 # . . push args -217 68/push "/disp32\n"/imm32 -218 57/push-edi -219 # . . call -220 e8/call write/disp32 -221 # . . discard args -222 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -223 $convert:continue: -224 # rewind-stream(line) -225 # . . push args -226 51/push-ecx -227 # . . call -228 e8/call rewind-stream/disp32 -229 # . . discard args -230 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -231 # write-stream-data(out, line) -232 # . . push args -233 51/push-ecx -234 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) -235 # . . call -236 e8/call write-stream-data/disp32 -237 # . . discard args -238 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -239 # loop -240 e9/jump $convert:loop/disp32 -241 $convert:break: -242 # if (!tests-found?) goto end -243 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx -244 74/jump-if-equal $convert:end/disp8 -245 # write(new-code-segment, " c3/return\n") -246 # . . push args -247 68/push " c3/return\n"/imm32 -248 57/push-edi -249 # . . call -250 e8/call write/disp32 -251 # . . discard args -252 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -253 # write-stream-data(out, new-code-segment) -254 # . . push args -255 57/push-edi -256 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) -257 # . . call -258 e8/call write-stream-data/disp32 -259 # . . discard args -260 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp -261 $convert:end: -262 # flush(out) -263 # . . push args -264 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) -265 # . . call -266 e8/call flush/disp32 -267 # . . discard args -268 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp -269 # . reclaim locals -270 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x214/imm32 # add to esp -271 # . restore registers -272 5f/pop-to-edi -273 5b/pop-to-ebx -274 5a/pop-to-edx -275 59/pop-to-ecx -276 58/pop-to-eax -277 # . epilog -278 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp -279 5d/pop-to-ebp -280 c3/return -281 -282 # . . vim:nowrap:textwidth=0 + 37 # if (!kernel-string-equal?(argv[1], "test")) goto run-main + 38 # . eax = kernel-string-equal?(argv[1], "test") + 39 # . . push args + 40 68/push "test"/imm32 + 41 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) + 42 # . . call + 43 e8/call kernel-string-equal?/disp32 + 44 # . . discard args + 45 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp + 46 # . if (eax == 0) goto run-main + 47 3d/compare-eax-and 0/imm32 + 48 74/jump-if-equal $run-main/disp8 + 49 # run-tests() + 50 e8/call run-tests/disp32 + 51 # return *Num-test-failures + 52 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 3/r32/ebx Num-test-failures/disp32 # copy *Num-test-failures to ebx + 53 eb/jump $main:end/disp8 + 54 $run-main: + 55 # - otherwise convert stdin + 56 # convert(Stdin, Stdout) + 57 # . . push args + 58 68/push Stdout/imm32 + 59 68/push Stdin/imm32 + 60 # . . call + 61 e8/call convert/disp32 + 62 # . . discard args + 63 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp + 64 # . syscall(exit, 0) + 65 bb/copy-to-ebx 0/imm32 + 66 $main:end: + 67 b8/copy-to-eax 1/imm32/exit + 68 cd/syscall 0x80/imm8 + 69 + 70 convert: # in : (address buffered-file), out : (address buffered-file) -> <void> + 71 # pseudocode + 72 # bool tests-found = false + 73 # var line = new-stream(512, 1) + 74 # var new-code-segment = new-stream(Segment-size, 1) + 75 # write(new-code-segment, "\n==code\n") + 76 # write(new-code-segment, "run-tests:\n") + 77 # while true + 78 # clear-stream(line) + 79 # read-line-buffered(in, line) + 80 # if (line->write == 0) break # end of file + 81 # var word-slice = next-word(line) + 82 # if is-label?(word-slice) + 83 # if slice-starts-with?(word-slice, "test-") + 84 # tests-found = true + 85 # write(new-code-segment, " e8/call ") + 86 # write-slice(new-code-segment, word-slice) + 87 # write(new-code-segment, "/disp32\n") + 88 # rewind-stream(line) + 89 # write-stream-data(out, line) + 90 # if tests-found + 91 # write(new-code-segment, " c3/return\n") + 92 # write-stream-data(out, new-code-segment) + 93 # flush(out) + 94 # + 95 # . prolog + 96 55/push-ebp + 97 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp + 98 # . save registers + 99 50/push-eax +100 51/push-ecx +101 52/push-edx +102 53/push-ebx +103 57/push-edi +104 # var line/ecx : (address stream byte) = stream(512) +105 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x200/imm32 # subtract from esp +106 68/push 0x200/imm32/length +107 68/push 0/imm32/read +108 68/push 0/imm32/write +109 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . . # copy esp to ecx +110 # var word-slice/edx = {0, 0} +111 68/push 0/imm32/end +112 68/push 0/imm32/start +113 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . . # copy esp to edx +114 # tests-found?/ebx = false +115 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx +116 # new-code-segment/edi = new-stream(Heap, Segment-size, 1) +117 # . eax = new-stream(Heap, Segment-size, 1) +118 # . . push args +119 68/push 1/imm32 +120 ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Segment-size/disp32 # push *Segment-size +121 68/push Heap/imm32 +122 # . . call +123 e8/call new-stream/disp32 +124 # . . discard args +125 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp +126 # . edi = eax +127 89/copy 3/mod/direct 7/rm32/edi . . . 0/r32/eax . . # copy eax to edi +128 # write(new-code-segment, "\n== code\n") +129 # . . push args +130 68/push "\n== code\n"/imm32 +131 57/push-edi +132 # . . call +133 e8/call write/disp32 +134 # . . discard args +135 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +136 # write(new-code-segment, "run-tests:\n") +137 # . . push args +138 68/push "run-tests:\n"/imm32 +139 57/push-edi +140 # . . call +141 e8/call write/disp32 +142 # . . discard args +143 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +144 $convert:loop: +145 # clear-stream(line) +146 # . . push args +147 51/push-ecx +148 # . . call +149 e8/call clear-stream/disp32 +150 # . . discard args +151 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +152 # read-line-buffered(in, line) +153 # . . push args +154 51/push-ecx +155 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) +156 # . . call +157 e8/call read-line-buffered/disp32 +158 # . . discard args +159 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +160 $convert:check0: +161 # if (line->write == 0) break +162 81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx +163 0f 84/jump-if-equal $convert:break/disp32 +164 # next-word(line, word-slice) +165 # . . push args +166 52/push-edx +167 51/push-ecx +168 # . . call +169 e8/call next-word/disp32 +170 # . . discard args +171 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +172 $convert:check-for-label: +173 # if (!is-label?(word-slice)) continue +174 # . eax = is-label?(word-slice) +175 # . . push args +176 52/push-edx +177 # . . call +178 e8/call is-label?/disp32 +179 # . . discard args +180 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +181 # . if (eax == 0) continue +182 3d/compare-eax-and 0/imm32 +183 74/jump-if-equal $convert:continue/disp8 +184 $convert:check-label-prefix: +185 # strip trailing ':' from word-slice +186 ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4) +187 # if !slice-starts-with?(word-slice, "test-") continue +188 # . . push args +189 68/push "test-"/imm32 +190 52/push-edx +191 # . . call +192 e8/call slice-starts-with?/disp32 +193 # . . discard args +194 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +195 # . if (eax == 0) break +196 3d/compare-eax-and 0/imm32 +197 74/jump-if-equal $convert:continue/disp8 +198 $convert:call-test-function: +199 # tests-found? = true +200 bb/copy-to-ebx 1/imm32/true +201 # write(new-code-segment, " e8/call ") +202 # . . push args +203 68/push " e8/call "/imm32 +204 57/push-edi +205 # . . call +206 e8/call write/disp32 +207 # . . discard args +208 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +209 # write-slice(new-code-segment, word-slice) +210 # . . push args +211 52/push-edx +212 57/push-edi +213 # . . call +214 e8/call write-slice/disp32 +215 # . . discard args +216 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +217 # write(new-code-segment, "/disp32\n") +218 # . . push args +219 68/push "/disp32\n"/imm32 +220 57/push-edi +221 # . . call +222 e8/call write/disp32 +223 # . . discard args +224 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +225 $convert:continue: +226 # rewind-stream(line) +227 # . . push args +228 51/push-ecx +229 # . . call +230 e8/call rewind-stream/disp32 +231 # . . discard args +232 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +233 # write-stream-data(out, line) +234 # . . push args +235 51/push-ecx +236 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) +237 # . . call +238 e8/call write-stream-data/disp32 +239 # . . discard args +240 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +241 # loop +242 e9/jump $convert:loop/disp32 +243 $convert:break: +244 # if (!tests-found?) goto end +245 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx +246 74/jump-if-equal $convert:end/disp8 +247 # write(new-code-segment, " c3/return\n") +248 # . . push args +249 68/push " c3/return\n"/imm32 +250 57/push-edi +251 # . . call +252 e8/call write/disp32 +253 # . . discard args +254 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +255 # write-stream-data(out, new-code-segment) +256 # . . push args +257 57/push-edi +258 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) +259 # . . call +260 e8/call write-stream-data/disp32 +261 # . . discard args +262 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp +263 $convert:end: +264 # flush(out) +265 # . . push args +266 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) +267 # . . call +268 e8/call flush/disp32 +269 # . . discard args +270 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp +271 # . reclaim locals +272 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x214/imm32 # add to esp +273 # . restore registers +274 5f/pop-to-edi +275 5b/pop-to-ebx +276 5a/pop-to-edx +277 59/pop-to-ecx +278 58/pop-to-eax +279 # . epilog +280 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp +281 5d/pop-to-ebp +282 c3/return +283 +284 # . . vim:nowrap:textwidth=0 -- cgit 1.4.1-2-gfad0