📄 cmd_option.asm
字号:
or byte [rOptions+RebuildOptions.ComputeImage], 1 mov byte [OP.OCompute],'E' jmp .next.I: cmp al,'i' jz @F cmp al,'I' jnz .H@@ mov al,[esi] cmp al,'0' jb near .next cmp al,'3' ja near .next inc esi mov [OP.OImportmode], al sub al, '0' mov [rOptions+RebuildOptions.ImportMode], al jmp .next.H: cmp al, 'h' jz @F cmp al, 'H' jnz near .next@@ mov al,[esi] cmp al,'0' jb near .next cmp al,'7' ja near .next inc esi mov [OP.OReloadmode], al sub al, '0' mov [rOptions+RebuildOptions.ReloadHeader], al jmp .nextsegment _LDATAOP:.msgVSIZE: db 'Virtual size update (Enabled/Disabled): '.OVSizemode: db 'E',0.msgPSIZE: db 'Physical size update (Enabled/Disabled): '.OPSizemode: db 'E',0.msgCAVE: db 'Import caving attempt (Enabled/Disabled): '.OCavemode: db 'D',0.msgBUILD: db 'PE header rebuilding (Enabled/Disabled): '.OBuildmode: db 'D',0.msgRELOAD: db 'PE header reload mode : '.OReloadmode: db '0',0.msgPESHRINK: db 'PE Structure Optimization (Enabled/Disabled): '.OShrinkmode: db 'E',0.msgCOMPUTE: db 'Compute ImageSize (Enabled/Disabled): '.OCompute: db 'D',0.msgIMPORT: db 'Actual Import mode : '.OImportmode: db '3',0segment _LTEXTO_BHRAMA: call [pSkipWhiteSpace] ; skip to real params jz .status.next: lodsb ; get subcommand cmp al,0 jnz .r.status: mov esi,OB.msgOBJECTSIZE call [pPrintToCommandWindow] mov esi,OB.msgPESHRINK call [pPrintToCommandWindow] mov esi,OB.msgHEADER call [pPrintToCommandWindow] mov esi,OB.msgIMPORT call [pPrintToCommandWindow] jmp Parser.return.r: cmp al,'r' jnz .R and byte [Bhrama_Struc+BhramaComStruc.OptL3+1], 0xFE mov byte [OB.OSizemode],'D' jmp short .next.R: cmp al,'R' jnz .s or byte [Bhrama_Struc+BhramaComStruc.OptL3+1], 1 mov byte [OB.OSizemode],'E' jmp short .next.s: cmp al,'s' jnz .S and byte [Bhrama_Struc+BhramaComStruc.OptL3], 0xFE mov byte [OB.OShrinkmode],'D' jmp short .next.S: cmp al,'S' jnz .h or byte [Bhrama_Struc+BhramaComStruc.OptL3], 1 mov byte [OB.OShrinkmode],'E' jmp .next.h: cmp al,'h' jnz .H and byte [Bhrama_Struc+BhramaComStruc.OptL4+2], 0xFE mov byte [OB.OHeadermode],'D' jmp .next.H: cmp al,'H' jnz .03 or byte [Bhrama_Struc+BhramaComStruc.OptL4+2], 1 mov byte [OB.OHeadermode],'E' jmp .next.03: cmp al,'0' jb near .next cmp al,'3' ja near .next mov [OB.OImportmode],al sub al,'0' mov [Bhrama_Struc+BhramaComStruc.OptL4+1],al jmp .nextsegment _LDATAOB:.msgOBJECTSIZE: db 'PE Object size recomputation (Enabled/Disabled): '.OSizemode: db 'E',0.msgPESHRINK: db 'PE Structure Optimization (Enabled/Disabled): '.OShrinkmode: db 'E',0.msgHEADER: db 'PE Header restoration (Enabled/Disabled): '.OHeadermode: db 'D',0.msgIMPORT: db 'Actual Import mode : '.OImportmode: db '3',0segment _LTEXTO_SCREENDUMP: call [pSkipWhiteSpace] ; skip to real params jz ON_TOGGLE_EXPERT_MODE lodsb ; get subcommand and al,0x5F ; upcase cmp al,'D' jz ON_SET_DUMP_NUMBER cmp al,'F' jz ON_SET_DUMP_BASEFILENAME cmp al,'V' jz ON_VIEW_SCREENDUMP_OPTIONS jmp Option_HELPON_TOGGLE_EXPERT_MODE: xor byte [ON_TOGGLE_EXPERT_MODE.Emode],1 mov esi,.msgEXPERT_MODE call [pPrintToCommandWindow] jmp Parser.returnsegment _LDATA.msgEXPERT_MODE:db 'Screendump expert mode (Enabled/Disabled): '.Emode: db 'D',0segment _LTEXTON_SET_DUMP_NUMBER: call [pSkipWhiteSpace] ;skip to real params jz near Option_HELP mov edi,Parse_ScreenDump.EmodeFileName add edi,[Parse_ScreenDump.EmodeExtPtr] call EmodeSub.SetDumpNum jmp Parser.returnON_SET_DUMP_BASEFILENAME: call [pSkipWhiteSpace] ; skip to real params jz near Option_HELP mov edi,Parse_ScreenDump.EmodeFileName mov ebx,Parse_ScreenDump.EmodeExtPtr ; num ptr call EmodeSub.SetBaseFileName jmp near Parser.returnON_VIEW_SCREENDUMP_OPTIONS: mov esi,ON_TOGGLE_EXPERT_MODE.msgEXPERT_MODE mov ebp,[pPrintToCommandWindow] call ebp mov esi,Parse_ScreenDump.EmodeFileName call ebp mov esi,Parse_ScreenDump.modeMsg call ebp jmp Parser.errorO_MEMDUMP: call [pSkipWhiteSpace] ; skip to real params jz OD_TOGGLE_EXPERT_MODE lodsb ; get subcommand and al,0x5F ; upcase cmp al,'D' jz near OD_SET_DUMP_NUMBER cmp al,'F' jz near OD_SET_DUMP_BASEFILENAME cmp al,'V' jz near OD_VIEW_DUMP_OPTIONS jmp Option_HELPOD_TOGGLE_EXPERT_MODE: xor byte [OD_TOGGLE_EXPERT_MODE.Emode],1 mov esi,.msgEXPERT_MODE call [pPrintToCommandWindow] jmp near Parser.returnsegment _LDATA.msgEXPERT_MODE:db 'Memdump expert mode (Enabled/Disabled): '.Emode: db 'D',0segment _LTEXTOD_SET_DUMP_NUMBER: call [pSkipWhiteSpace] ;skip to real params jz near Option_HELP mov edi,Parse_Dump.EmodeFileName add edi,[Parse_Dump.EmodeExtPtr] call EmodeSub.SetDumpNum jmp Parser.returnOD_SET_DUMP_BASEFILENAME: call [pSkipWhiteSpace] ; skip to real params jz near Option_HELP mov edi,Parse_Dump.EmodeFileName mov ebx,Parse_Dump.EmodeExtPtr ; num ptr call EmodeSub.SetBaseFileName jmp Parser.returnOD_VIEW_DUMP_OPTIONS: mov ebp,[pPrintToCommandWindow] mov esi,OD_TOGGLE_EXPERT_MODE.msgEXPERT_MODE call ebp mov esi,Parse_Dump.EmodeFileName call ebp jmp Parser.error; Expert/Auto Mode subroutinesEmodeSub:.SetDumpNum: ; EDI = number space in filename, ESI = param push esi mov ecx,OPT_EMODE_NUMLEN mov edx,ecx.sdn_loop1: lodsb ; validate the param cmp al,'0' jb .sdn_store0 cmp al,'9' ja .sdn_store0 loop .sdn_loop1.sdn_store0: pop esi sub edx,ecx ; how many positions are actually valid or ecx,ecx jz .sdn_storeN mov al,'0' rep stosb ; 0-prepend if the number is smaller than 3-pos.sdn_storeN: mov ecx,edx jecxz .sdn_end ; do we have ANY valid numbers ? =) rep movsb.sdn_end: dec edi ; need to dec once due to the auto-inc on dump dec byte [edi] retn.SetBaseFileName: ; ESI = params, EDI = filename buf, EBX = num ptr push edi xor ecx,ecx ; get length.sbf_loop1: lodsb cmp al,'*' jne .sbf_notstar.sbf_star: or ebx,ebx ; check if numptr already stored jz .sbf_noovfl mov [ebx],ecx ; set number ptr xor ebx,ebx ; ptr set, flag it push eax push ecx mov ecx,OPT_EMODE_NUMLEN - 1 mov al,'0' ; store init dump number, ie '000' rep stosb dec eax stosb pop ecx pop eax jmp .sbf_noovfl.sbf_notstar: inc ecx cmp ecx,byte OPT_EMODE_FILENAMELEN jbe .sbf_noovfl xor eax,eax ; filename length limit reached jmp .sbf_star ; store the number ptr and init.sbf_noovfl: or al,al jz .sbf_zero cmp al,'*' jz .sbf_loop1 stosb jmp .sbf_loop1.sbf_zero: or ebx,ebx ; if there was no * in the filename jnz .sbf_star ; append dump number stosb ; store 0-term; cmp ecx,byte OPT_EMODE_FILENAMELEN; jbe .sbf_nameok; mov esi,.helpOFE ; error - filename too long; call [pPrintToCommandWindow].sbf_nameok: pop esi call [pPrintToCommandWindow] retn;segment _LDATA;.helpOFE: db 'Filename is too long and was trimmed. Edit source and recompile for larger filename buffer.',0segment _LTEXT.IncDumpNum: ; EDI = dump number ptr mov ecx,OPT_EMODE_NUMLEN add edi,ecx dec edi ; now we got a ptr to the last digit mov esi,edi std ; and going in reverse mov ah,1.idn_loop1: lodsb add al,ah mov ah,1 ; have to set ah=0 dec ah ; and clear AF aaa or al,0x30 stosb loop .idn_loop1 cld ; the rest of the code assumes DF=0 =) retn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -