728x90

어셈블리로 strlen 을 구현해 봤다.

 

strlen의 경우 al 즉 8bit 1byte씩 문자들을 '\n'와 비교하여 문자열 끝을 찾았다.

sys_read를 통해 문자열을 입력하니 fgets 처럼 '\n'이 문자열에 포함되어있었다.  

bss영역인 string에서도 직접 1byte씩 메모리에 접근하여 모든 문자열을 1byte씩 비교할 수 있었다.

 

strlen 구현은 무난했지만 printf함수 호출에서 오히려 더 어려움을 느꼇던것 같다.

단순히 호출하면 되는 줄 알았지만 스택 메모리 주소가 맞지않아 rsp를 조정후에 호출해주었다.

 

printf함수 내부적으로 movaps를 호출하는데 여기서 스택메모리가 16 단위로 aligned 되어야하는것이다.

디버깅 후에 add rsp, 8을 통해 16단위로 stack memory를 aligned 해주어 printf호출에 성공했다.

 

728x90

'Programming > assembly' 카테고리의 다른 글

nasm x64 assembly strcpy 구현 -1  (1) 2020.03.11
inline func alloca  (0) 2020.03.10
loop  (0) 2020.03.01
어셈블리 문법  (0) 2020.03.01
echo  (0) 2020.03.01

+ Recent posts