mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
x86 asm: move gnu gas char literals from x86-assembly-cheat
This commit is contained in:
14
README.adoc
14
README.adoc
@@ -12363,6 +12363,20 @@ When reading disassembly, many instructions have either a `.n` or `.w` suffix.
|
|||||||
|
|
||||||
Bibliography: https://stackoverflow.com/questions/27147043/n-suffix-to-branch-instruction
|
Bibliography: https://stackoverflow.com/questions/27147043/n-suffix-to-branch-instruction
|
||||||
|
|
||||||
|
==== GNU GAS assembler char literals
|
||||||
|
|
||||||
|
link:userland/arch/x86_64/char_literals.S[]
|
||||||
|
|
||||||
|
http://stackoverflow.com/questions/33246811/how-to-use-character-literals-in-gnu-gas-to-replace-numbers
|
||||||
|
|
||||||
|
This syntax plays horribly with the C preprocessor:
|
||||||
|
|
||||||
|
....
|
||||||
|
MACRO($'a)
|
||||||
|
....
|
||||||
|
|
||||||
|
fails because cpp treats string and char literals magically.
|
||||||
|
|
||||||
=== NOP instructions
|
=== NOP instructions
|
||||||
|
|
||||||
* x86: link:userland/arch/x86_64/nop.S[NOP]
|
* x86: link:userland/arch/x86_64/nop.S[NOP]
|
||||||
|
|||||||
25
userland/arch/x86_64/char_literals.S
Normal file
25
userland/arch/x86_64/char_literals.S
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/* https://github.com/cirosantilli/linux-kernel-module-cheat#gnu-gas-assembler-char-literals */
|
||||||
|
|
||||||
|
#include <lkmc.h>
|
||||||
|
|
||||||
|
LKMC_PROLOGUE
|
||||||
|
mov $0, %r12
|
||||||
|
|
||||||
|
/* Memory. */
|
||||||
|
mov mychar, %r12b
|
||||||
|
LKMC_ASSERT_EQ(%r12, $0x61)
|
||||||
|
|
||||||
|
/* Immediate. Without the `$`, does a memory access, and segfaults! */
|
||||||
|
mov $'b, %r12b
|
||||||
|
LKMC_ASSERT_EQ(%r12, $0x62)
|
||||||
|
|
||||||
|
/* Space character works. */
|
||||||
|
mov $' , %r12b
|
||||||
|
LKMC_ASSERT_EQ(%r12, $0x20)
|
||||||
|
|
||||||
|
/* Backslash escapes work. */
|
||||||
|
mov $'\n , %r12b
|
||||||
|
LKMC_ASSERT_EQ(%r12, $0x0A)
|
||||||
|
LKMC_EPILOGUE
|
||||||
|
mychar:
|
||||||
|
.byte 'a
|
||||||
Reference in New Issue
Block a user