nasm:如何填充字符串的开头,使其恰好在对齐边界处结束
nasm: how to pad the beginning of the string such that it ends right at an alignment boundary
我不知道如何填充字符串的开头,使其恰好在对齐边界处结束:
%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
此版本假定您使用此宏的所有部分的开头对齐 至少 与您要对齐数据的 2 的相同幂。
我不知道如何填充字符串的开头,使其恰好在对齐边界处结束:
%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
此版本假定您使用此宏的所有部分的开头对齐 至少 与您要对齐数据的 2 的相同幂。