如何解决简短形式以获取汇编中的字符串长度
要获取字符串的长度,我正在使用以下函数:
string: .asciz "hello world!\n"
get_string_length:
mov $0,%eax # size goes in rax
.L1_loop:
movzbw string(,%eax,1),%ebx
cmp $0,%ebx
je .L1_exit
inc %eax
jmp .L1_loop
.L1_exit:
ret
但是,我也看到了以下内容:
hello_world:
.ascii "hello world\n"
hello_world_len = . - hello_world
以下内容如何工作?那是.
表示法,都是为了得到长度?例如,在以下github片段中:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/9dccafe00d9b0affa8847836a71ebb4c37be7090/userland/arch/x86_64/freestanding/linux/hello.S
解决方法
第一个版本确定运行时间 的长度,第二个版本确定运行时间 的长度。
第二个表达式中的 error_code value
1 2892141 162
2 2907630 162
3 2907631 162
4 2907632 162
5 2907633 162
6 2907634 162
7 2907635 162
8 2907636 162
9 2907637 162
10 2907638 162
11 2907639 162
12 2907640 162
13 2907641 162
14 2907642 162
15 2907644 162
16 2907645 162
表示当前地址(在数据段中)。然后,表达式
.
从当前地址(由hello_world_len = . - hello_world
表示)中减去由标签.ascii "hello world\n"
表示的字符串hello_world:
的起始地址,得出长度值.
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。