Pelles C forum
Assembly language => Assembly discussions => Topic started by: HellOfMice on February 11, 2025, 09:45:55 AM
-
I have read that it would be a good idea to avoid jumps/branches
; ***************************
; *** Verify 32 bits file ***
; ***************************
@Pgm_32_Bits :
xor r12w,r12w
mov r14b,1
mov r13w,1
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.FileHeader.SizeOfOptionalHeader,SIZEOF IMAGE_OPTIONAL_HEADER64
cmovne r13w,r12w
and r14b,r13b
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.OptionalHeader.Subsystem,IMAGE_SUBSYSTEM_WINDOWS_GUI
cmovne r13w,r12w
and r14b,r13b
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.OptionalHeader.NumberOfRvaAndSizes,IMAGE_NUMBEROF_DIRECTORY_ENTRIES
cmovne r13w,r12w
and r14b,r13b
jz @Error_02
Before I had the following shorter code. Which one is the best?
; ***************************
; *** Verify 32 bits file ***
; ***************************
@Pgm_32_Bits :
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.FileHeader.SizeOfOptionalHeader,SIZEOF IMAGE_OPTIONAL_HEADER64
je ERREUR
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.OptionalHeader.Subsystem,IMAGE_SUBSYSTEM_WINDOWS_GUI
je ERREUR
cmp WORD PTR [rax].IMAGE_NT_HEADERS32.OptionalHeader.NumberOfRvaAndSizes,IMAGE_NUMBEROF_DIRECTORY_ENTRIES
je ERREUR
-
Hi Philippe,
Both of the options are looking good. By the way, no need to optimize every section of your code.
-
Yes Vortex, but it is interesting to see what the cpu does.
@Loop :
mov [rdi].SECTION_FOUND.Index,r8
lea rcx,[rdi].SECTION_FOUND.Section
movdqu xmm1,OWORD PTR [rsi].IMAGE_SECTION_HEADER.Name
movdqu OWORD PTR [rcx].IMAGE_SECTION_HEADER.Name,xmm1
movdqu xmm1,OWORD PTR [rsi].IMAGE_SECTION_HEADER.SizeOfRawData
movdqu OWORD PTR [rcx].IMAGE_SECTION_HEADER.SizeOfRawData,xmm1
movq mm0,QWORD PTR [rsi].IMAGE_SECTION_HEADER.NumberOfRelocations
movq QWORD PTR [rcx].IMAGE_SECTION_HEADER.NumberOfRelocations,mm0
add rdi,SIZEOF SECTION_FOUND
add rsi,SIZEOF IMAGE_SECTION_HEADER
add r8,1
sub rdx,1
jnz @Loop
emms
ret
Here I avoid memcpy I have 96 sections to copy
I think it could be better like this:
@Loop :
mov [rdi].SECTION_FOUND.Index,r8
lea rcx,[rdi].SECTION_FOUND.Section
movdqu xmm1,OWORD PTR [rsi].IMAGE_SECTION_HEADER.Name
movdqu xmm2,OWORD PTR [rsi].IMAGE_SECTION_HEADER.SizeOfRawData
movq mm0,QWORD PTR [rsi].IMAGE_SECTION_HEADER.NumberOfRelocations
movdqu OWORD PTR [rcx].IMAGE_SECTION_HEADER.Name,xmm1
movdqu OWORD PTR [rcx].IMAGE_SECTION_HEADER.SizeOfRawData,xmm2
movq QWORD PTR [rcx].IMAGE_SECTION_HEADER.NumberOfRelocations,mm0
add rdi,SIZEOF SECTION_FOUND
add rsi,SIZEOF IMAGE_SECTION_HEADER
add r8,1
sub rdx,1
jnz @Loop
emms
ret