私はcopy_from_user
関数を読んでいます、copy_from_user
関数では、マクロ__get_user_asm
が使用されています。`xorb%b1、%b1`には%b1(b 1ではなく、b L)がありますか?
linuxにはmmapのシステムコールがあり、mmapのシステムコールは関数copy_from_user
を呼び出します。サイズが一定の場合、この関数はマクロ__get_user_asm
を使用します。私は実際のソースに __get_user_asm(*(u8 *)dst, (u8 __user *)src, ret, "b", "b", "=q", 1);
、
1: movb %2,%b1\n
2:\n
.section .fixup, "ax" \n
3: mov %3, %0 \n
**xorb %b1, %b1\n**
jmp 2b\n
.previous\n
: "=r" (ret), =q(dst)
:"m"(dst), "i"(1), "0"(ret)
.quad "1b", "2b"\n
.previous\n```
、 どこかに私は理解できない存在を翻訳しようとすると、__get_user_asm
の内容は
#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret) \
asm volatile("1: mov"itype" %2,%"rtype"1\n" \
"2:\n" \
".section .fixup,\"ax\"\n" \
"3: mov %3,%0\n" \
" xor"itype" %"rtype"1,%"rtype"1\n" \
" jmp 2b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
: "=r" (err), ltype(x) \
: "m" (__m(addr)), "i" (errret), "0" (err))
です。
1、xorb %b1, %b1
、%b1
(b、not b L)?
2、jmp 2b
は、2b
のラベルまたはメモアドレスですか? 2b
がラベルの場合、このlableをどのように見つけることができますか?
3、.quad "1b", "2b"
の機能は何ですか?
ここで私はセマンティクス層でのLinuxカーネルソースを理解するための知識を得ることができますか?
['xorb%b1、%b1'は'%b1'を0に設定します。](http://stackoverflow.com/questions/33666617/what-is-the-best-way-to-set-a -x-assembly-xor-mov-or-and) – Cornstalks
ええ、私は文章のことを知っています。しかし%b1は何か分からないのですか? – peasantspring