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 uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
- TEXT ·bdoor_inout(SB), NOSPLIT|WRAPPER, $0
- MOVL ax+0(FP), AX
- MOVL bx+4(FP), BX
- MOVL cx+8(FP), CX
- MOVL dx+12(FP), DX
- MOVL si+16(FP), SI
- MOVL di+20(FP), DI
- MOVL bp+24(FP), BP
- // IN to DX from EAX
- INL
- MOVL AX, retax+28(FP)
- MOVL BX, retbx+32(FP)
- MOVL CX, retcx+36(FP)
- MOVL DX, retdx+40(FP)
- MOVL SI, retsi+44(FP)
- MOVL DI, retdi+48(FP)
- MOVL BP, retbp+52(FP)
- RET
- // func bdoor_hbout(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
- TEXT ·bdoor_hbout(SB), NOSPLIT|WRAPPER, $0
- MOVL ax+0(FP), AX
- MOVL bx+4(FP), BX
- MOVL cx+8(FP), CX
- MOVL dx+12(FP), DX
- MOVL si+16(FP), SI
- MOVL di+20(FP), DI
- MOVL bp+24(FP), BP
- CLD; REP; OUTSB
- MOVL AX, retax+28(FP)
- MOVL BX, retbx+32(FP)
- MOVL CX, retcx+36(FP)
- MOVL DX, retdx+40(FP)
- MOVL SI, retsi+44(FP)
- MOVL DI, retdi+48(FP)
- MOVL BP, retbp+52(FP)
- RET
- // func bdoor_hbin(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
- TEXT ·bdoor_hbin(SB), NOSPLIT|WRAPPER, $0
- MOVL ax+0(FP), AX
- MOVL bx+4(FP), BX
- MOVL cx+8(FP), CX
- MOVL dx+12(FP), DX
- MOVL si+16(FP), SI
- MOVL di+20(FP), DI
- MOVL bp+24(FP), BP
- CLD; REP; INSB
- MOVL AX, retax+28(FP)
- MOVL BX, retbx+32(FP)
- MOVL CX, retcx+40(FP)
- MOVL DX, retdx+44(FP)
- MOVL SI, retsi+48(FP)
- MOVL DI, retdi+52(FP)
- MOVL BP, retbp+56(FP)
- RET
- // func bdoor_inout_test(ax, bx, cx, dx, si, di, bp uint32) (retax, retbx, retcx, retdx, retsi, retdi, retbp uint32)
- TEXT ·bdoor_inout_test(SB), NOSPLIT|WRAPPER, $0
- MOVL ax+0(FP), AX
- MOVL bx+4(FP), BX
- MOVL cx+8(FP), CX
- MOVL dx+12(FP), DX
- MOVL si+16(FP), SI
- MOVL di+20(FP), DI
- MOVL bp+24(FP), BP
- MOVL AX, retax+28(FP)
- MOVL BX, retbx+32(FP)
- MOVL CX, retcx+36(FP)
- MOVL DX, retdx+40(FP)
- MOVL SI, retsi+44(FP)
- MOVL DI, retdi+48(FP)
- MOVL BP, retbp+52(FP)
- RET
|