beta.blog

FASM: Get String Length (strlen) – Pure assembler code

by on Mar.20, 2011, under Programming

Getting the length of a string is very important for my projects, thus I was looking for different ways of implementing functions which would allow me to determine the length of a string via my FASM code. After doing some research I found two ways which worked fine for me.

The first way was to include the C-library and use its functions, strlen in this case:

[code]import msvcrt,strlen,’strlen'[/code]

I later used it like that:

[code]invoke strlen,myString[/code]

And EAX would hold the length of the string. Ok, so far so good.
Anyway, I was looking for a better way of getting its length, so I found a small procedure which would search a string for the null-terminator and later return its length.

Here’s the procedure:

[fasm]; Will return the length of a null-terminated string
; The result will be written to ECX
;
; Usage:
; hello_tmp db "test",0
; …
; ccall   strlen, hello_tmp
proc  strlen, strInput
mov ecx,-1
mov al,0
mov edi,[strInput]
cld
repne scasb
not ecx
dec ecx
ret
endp[/fasm]

As stated in the comments already, the result will be written to ECX. If you would prefer using a different terminator, replace

[code]mov al,0[/code]

With another char from the ASCII-table, like:

[code]mov al,0x32[/code]

It’s a great way of getting the length of a string and it’s also faster than the standard C-libraries.


Leave a Reply

*

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!