정렬 경계에서 바로 끝나도록 문자열의 시작 부분을 채우는 방법을 알 수 없습니다.
%macro string 1
_unaligned:
; some preprocesor expression comes here
db %1
_aligned:
%endmacro
몇 시간 동안 다른 솔루션을 시도했지만 여전히 아무것도 없습니다. 아무도 도울 수 없습니까?
편집하다:
다음은 작동 방식의 실제 예입니다 (32 비트 코드의 경우).
%define LAST 0
%macro xword 2
%strlen len %1
; pad - some preprocassor magic comes here
db %1
NAME__%2 db len
LINK__%2 dd LAST ; must be aligned !!!
CODE__%2 dd code
PAR__%2
%define LAST PAR__%2
%endmacro
용법:
xword 'TEST', test01
구조 생성 (예 : $ = 0x0001) :
0x0001
0x0002
0x0003 db 'T'
0x0004 db 'E'
0x0005 db 'S'
0x0006 db 'T'
0x0007 db 4
0x0008 dd 0 ; LAST (must be ALIGNED)
0x000C dd code
가능한 한 많은 메모리를 저장해야하므로 필요 이상으로 패딩이 없어야합니다.
일부 경우에 필요한 것보다 더 많은 패딩을 추가 할 수 있기 때문에 차선책이지만 작동합니다.
%macro string 1
%strlen numchars %1
align 4, db 0
times (4-numchars)&3 db 0
db %1
%%_aligned:
%endmacro
4를 원하는 정렬로 바꿉니다 (그리고 3은 정렬에서 1을 뺀 값).
편집 : 필요한 것보다 더 많은 패딩을 추가하지 않아야하는 또 다른 버전이 있습니다.
%macro string 1
%strlen %%numchars %1
%%loc equ ($-$$)
times (4-(%%loc+%%numchars))&3 db 0
db %1
%%_aligned:
%endmacro
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다