123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "textflag.h"
- // Doc of the golang plan9 assembler
- // http://p9.nyx.link/labs/sys/doc/asm.html
- //
- // A good primer of how to write golang with some plan9 flavored assembly
- // http://www.doxsey.net/blog/go-and-assembly
- //
- // Some x86 references
- // http://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html
- // https://cseweb.ucsd.edu/classes/sp10/cse141/pdf/02/S01_x86_64.key.pdf
- // https://en.wikibooks.org/wiki/X86_Assembly/Other_Instructions
- //
- // (This one is invaluable. Has a working example of how a standard function
- // call looks on the stack with the associated assembly.)
- // https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
- //
- // Reference with raw form of the Opcode
- // http://x86.renejeschke.de/html/file_module_x86_id_139.html
- //
- // Massive x86_64 reference
- // http://ref.x86asm.net/coder64.html#xED
- //
- // Adding instructions to the go assembler
- // https://blog.klauspost.com/adding-unsupported-instructions-in-golang-assembler/
- //
- // Backdoor commands
- // https://sites.google.com/site/chitchatvmback/backdoor
- // func bdoor_inout(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
- TEXT ·bdoor_inout(SB), NOSPLIT|WRAPPER, $0
- MOVQ ax+0(FP), AX
- MOVQ bx+8(FP), BX
- MOVQ cx+16(FP), CX
- MOVQ dx+24(FP), DX
- MOVQ si+32(FP), SI
- MOVQ di+40(FP), DI
- MOVQ bp+48(FP), BP
- // IN to DX from EAX
- INL
- MOVQ AX, retax+56(FP)
- MOVQ BX, retbx+64(FP)
- MOVQ CX, retcx+72(FP)
- MOVQ DX, retdx+80(FP)
- MOVQ SI, retsi+88(FP)
- MOVQ DI, retdi+96(FP)
- MOVQ BP, retbp+104(FP)
- RET
- // func bdoor_hbout(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
- TEXT ·bdoor_hbout(SB), NOSPLIT|WRAPPER, $0
- MOVQ ax+0(FP), AX
- MOVQ bx+8(FP), BX
- MOVQ cx+16(FP), CX
- MOVQ dx+24(FP), DX
- MOVQ si+32(FP), SI
- MOVQ di+40(FP), DI
- MOVQ bp+48(FP), BP
- CLD; REP; OUTSB
- MOVQ AX, retax+56(FP)
- MOVQ BX, retbx+64(FP)
- MOVQ CX, retcx+72(FP)
- MOVQ DX, retdx+80(FP)
- MOVQ SI, retsi+88(FP)
- MOVQ DI, retdi+96(FP)
- MOVQ BP, retbp+104(FP)
- RET
- // func bdoor_hbin(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
- TEXT ·bdoor_hbin(SB), NOSPLIT|WRAPPER, $0
- MOVQ ax+0(FP), AX
- MOVQ bx+8(FP), BX
- MOVQ cx+16(FP), CX
- MOVQ dx+24(FP), DX
- MOVQ si+32(FP), SI
- MOVQ di+40(FP), DI
- MOVQ bp+48(FP), BP
- CLD; REP; INSB
- MOVQ AX, retax+56(FP)
- MOVQ BX, retbx+64(FP)
- MOVQ CX, retcx+72(FP)
- MOVQ DX, retdx+80(FP)
- MOVQ SI, retsi+88(FP)
- MOVQ DI, retdi+96(FP)
- MOVQ BP, retbp+104(FP)
- RET
- // func bdoor_inout_test(ax, bx, cx, dx, si, di, bp uint64) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint64)
- TEXT ·bdoor_inout_test(SB), NOSPLIT|WRAPPER, $0
- MOVQ ax+0(FP), AX
- MOVQ bx+8(FP), BX
- MOVQ cx+16(FP), CX
- MOVQ dx+24(FP), DX
- MOVQ si+32(FP), SI
- MOVQ di+40(FP), DI
- MOVQ bp+48(FP), BP
- MOVQ AX, retax+56(FP)
- MOVQ BX, retbx+64(FP)
- MOVQ CX, retcx+72(FP)
- MOVQ DX, retdx+80(FP)
- MOVQ SI, retsi+88(FP)
- MOVQ DI, retdi+96(FP)
- MOVQ BP, retbp+104(FP)
- RET
|