Assembly 使用字节值参数运行程序的程序集(MASM)?
我正在编写一个汇编程序,它需要一个字符串和一个字节数组作为运行时参数。(字节不固定为字符值,并且都是0到255之间的无符号值) 执行命令示例:Assembly 使用字节值参数运行程序的程序集(MASM)?,assembly,command-line-arguments,masm,irvine32,Assembly,Command Line Arguments,Masm,Irvine32,我正在编写一个汇编程序,它需要一个字符串和一个字节数组作为运行时参数。(字节不固定为字符值,并且都是0到255之间的无符号值) 执行命令示例: Program.exe "A 32 byte array (fixed size)" "A Byte array of arbitrary length, (greater than 0)" 如何在汇编中获取参数?同样与问题无关的是,字节数组可以是任意长度,如果数组长度大于某个大小,是否会有问题?。参数将在运行时加载到内存中,并在程序执行时进
Program.exe "A 32 byte array (fixed size)" "A Byte array of arbitrary length, (greater than 0)"
如何在汇编中获取参数?同样与问题无关的是,字节数组可以是任意长度,如果数组长度大于某个大小,是否会有问题?。参数将在运行时加载到内存中,并在程序执行时进行更改,然后以新状态返回数组。(我使用汇编来加快处理时间)要获取C中argv之类的列表中的参数,您需要一个没有随Irvine的书附带的shell32.lib(据我在免费示例中看到的)。您可以在此处获得适当的shell32.lib:。安装Masm32后,您可以使用我的示例:
INCLUDE Irvine32.inc
IncludeLib C:\masm32\lib\shell32.lib
GetCommandLineW PROTO STDCALL
CommandLineToArgvW PROTO STDCALL, :DWORD, :DWORD
WideCharToMultiByte PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
.DATA
szArglist dd ?
nArgs dd ?
arg db 8192 dup (?) ; http://blogs.msdn.com/b/oldnewthing/archive/2003/12/10/56028.aspx
.CODE
main PROC
invoke GetCommandLineW
invoke CommandLineToArgvW, eax, OFFSET nArgs
test eax, eax
jz @@exit
mov [szArglist], eax ; Store the result of CommandLineToArgvW for LocalFree
mov esi, [eax] ; esi: *szArglist
@@:
invoke WideCharToMultiByte, 0,0,esi,-1,OFFSET arg,SIZEOF arg,0,0
mov edx, OFFSET arg
call writeString ; Write string to console (Irvine)
call CRLF ; New line on console (Irvine)
shl eax, 1 ; Result from WideCharToMultiByte multiplied by 2 due to Unicode
add esi, eax ; *szArglist += eax
sub dword ptr [nArgs], 1 ; Further arguments in the list?
jnz @B ; yes -> once more
invoke LocalFree, dword ptr [szArglist] ; Free the memory occupied by CommandLineToArgvW
@@exit:
exit ; Irvine's exit
main ENDP
END main
我建议用空格分隔数组的元素:
Program.exe“32字节数组(固定大小)”1 2 3 4 5
您是否已经用另一种语言编写了此程序,并发现它太慢了?我用java完成了概念性工作,但目前还没有,基本上我使用的是加密算法,主程序将使用此汇编程序作为外部应用程序,以更快地处理数据,然后将其返回主应用程序。主应用程序将执行此操作并等待响应,而不是自行处理数据。不幸的是,我知道的Java比ASM多得多,但使用它将帮助我更加精通Java。这取决于您为之编程的操作系统。请至少告诉我们.MODEL指令,例如.MODEL small
或.MODEL flat
。MODEL flat,为32位处理器构建。386架构,虽然如果另一个模型工作得更好,我可以更改它,但我对该模型的实际功能了解不多,我的书倾向于使用flat(kip irvine,x86处理器汇编语言第七版)谢谢,我会在第二天左右调查此事,现在我有一大堆工作要完成,不过我会给你回复的。