1
utf-8 텍스트의 주어진 위치에 문자를 반환하는 어셈블리 함수를 작성하려고합니다.조립 : get utf8 char 함수 도움말
많은 솔루션을 시도했지만 제대로 작동하지 않습니다. 이것은 내가 지금까지 가지고있는 것입니다 :
.globl utf8_get
.globl _utf8_get
utf8_get:
_utf8_get:
pushl %ebp
movl %esp, %ebp
movl 4(%ebp), %eax
movl 12(%ebp), %ecx
u_loop: cmpb $0x0, (%eax)
jz n_fnd
incl %eax
cmpl $0x0, %ecx
jz fnd
decl %ecx
jmp u_loop
n_fnd: movl $-0x1, %eax
popl %ebp
ret
fnd: movzbl (%eax), %eax
popl %ebp
ret
매개 변수는 unsigned char * 및 int입니다.
그러나 올바른 문자를 반환하지 않습니다. 반환 주소를 포함하지 4(%ebp)
을, -
필자가 작성한대로 char가 아닌 n 번째 바이트를 반환한다고 가정합니다 ... 몇 가지 변경을 시도했는데 결과가 거의 맞습니다. 하지만 내가 전에 wan't, 하나의 바이트를 얻을 ... – Cryptography
나는 첫 번째 인수가 4 (% ebp)에서 발견하고 0 (% ebp) 또는 그냥 (% ebp)에서 반송 주소라고 생각. – Cryptography
*'utf8_get'에 대한 엔트리에서 리턴 주소는'(% esp)'이고 첫 번째 인수는'4 (% esp)'입니다. 그러나 프롤로그'pushl % ebp; movl % esp, % ebp'는 스택 포인터를 푸시에서 4 바이트 씩 감소시키고 복사하기 전에 - 오래된'% ebp'가'(% ebp)'에 있으면 리턴 주소는'4 (% ebp)'이고 첫 번째 인수는'8 (% ebp)'입니다. –