能力值:
(RANK:350 )
2 楼
谢谢Spring.W!
按你的VC工程直接融合了MASM32汇编编译的方法,成功地在VC中直接对调用的.asm文件进行编译了,真是省事,VC和ASM的特长都能发挥起来。
能力值:
( LV7,RANK:100 )
3 楼
如果是vc6装vcpp5,如果是vs2003或2005自带ml.exe
这样不用指定什么c:\masm32\ml了,直接写ml就行。
这些微软官方都有介绍的,
其实大家注意的话应该都会看过。
能力值:
( LV2,RANK:10 )
4 楼
我试用Myshell.exe(Myshell.asm编译的运行文件) 加壳,xp sp2上面的notepad.exe 加壳运行出错,而有些exe 文件则正常。
是否是 Bound import 处理的问题?
能力值:
( LV12,RANK:410 )
5 楼
最初由 wwwddd 发布 我试用Myshell.exe(Myshell.asm编译的运行文件) 加壳,xp sp2上面的notepad.exe 加壳运行出错,而有些exe 文件则正常。 是否是 Bound import 处理的问题?
是Bound import 处理的问题,解决方法是你可以将Bound import移动到后面的节中(需要注意应该要在双字边界上),也可以加壳前将Bound import删除。
能力值:
( LV2,RANK:10 )
6 楼
1. 链接出错
在原来的工程文件中,链接有问题。出错信息是:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/TestUseVC.exe : fatal error LNK1120: 1 unresolved externals 我用的自己编译的myShell.obj文件。编译命令是
\masm32\bin\ml /c /coff /Cp myShell.asm
用光盘里面的则可以链接通过。
如果用 \masm32\bin\ml /c /Cp myShell.asm 编译,虽然有coff的信息出现,但也可以链接成功。
用“VC工程直接融合了MASM32汇编编译的方法”也是一样的结果。
可能是masm 版本的问题吧?我的是
Microsoft (R) Macro Assembler Version 6.14.8444
2. 找不到文件
另外在TestUseVCDlg.cpp中是否改
strcpy(pStr,"c:\test.exe");
为:
strcpy(pStr,"c:\\test.exe");
能力值:
( LV2,RANK:10 )
7 楼
最初由 wwwddd 发布 1. 链接出错 在原来的工程文件中,链接有问题。出错信息是: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/TestUseVC.exe : fatal error LNK1120: 1 unresolved externals ........
刚才又重新看了一下,是我疏漏了。在代码中改这个值就可以了。
“
_WJQ_USE_COMMAND_LINE EQU 1 ; 1=编译成命令行方式,否则编译成函数方式
”
能力值:
( LV12,RANK:410 )
8 楼
王景泉:
你好!
有问题请教,先谢谢了!
在附件中我建了一个工程,用c调用用汇编实现的加壳(myshell.asm),编译连接都通过了,在运行时运行到c调用用汇编时报错,谢谢帮我看一下,看该如何实现。 周江 答复:
======================================================================
我做的修改:
----------
1、修改WJQ_PUSHA 和 WJQ_POPA 宏定义bug
2、_WJQ_USE_COMMAND_LINE EQU 0 ;这里应该为0,否则成了命令行方式
3、关闭了调试器检查处理部分宏开关,建议自己完善后使用
_WJQ_CHECK_DEBUGER EQU 0 ; 1=检测Softice,trw2000等调试器
_WJQ_CHECK_TRW_USE_PROCESS EQU 0 ; 1=增加进程枚举内存搜索查找TRW,影响速度
_WJQ_DISP_TEST_DEBUGER EQU 0 ; 1=有调试器时,提示错误
_CHECK_BUT_IGNORE_DEBUGER EQU 0 ; 1=检测,但是忽略调试器(即检测到调试器也能正常使用)
4、修改了Restore_Shell_Init_data 函数没有彻底释放内存的bug
Restore_Shell_Init_data proc
WJQ_PUSHA
;------恢复初始化数据-----
mov ecx,Sheller_End - My_Import
mov esi,mem_offset
mov edi,offset My_Import
cld
rep movsb
;回收内存
push MEM_DECOMMIT
push (Sheller_End - My_Import)+100h
push mem_offset
call VirtualFree
.if eax == 0
mov eax,ERR_FREE_MEM
.else
mov eax,ERR_SUCESS
.endif
;
;彻底释放
push MEM_RELEASE
push 0 ;//muse be zero!!
push mem_offset
call VirtualFree
;
WJQ_POPA
ret
Restore_Shell_Init_data endp
5、使用VC++融合masm汇编的编译连接方式(参看论坛『《软件加密技术内幕》』中我的介绍)
6、VC++工程的Link选项,增加.text节可读写属性
在Link选项卡中加入:/SECTION:.text,ERW
(结束)
2006.3.20 by wjq
能力值:
( LV2,RANK:10 )
9 楼
正在链接...
LINK : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”规范)
libcmtd.lib(a_env.obj) : error LNK2019: 无法解析的外部符号 __imp__GetEnvironmentStrings@0 ,该符号在函数 ___crtGetEnvironmentStringsA 中被引用
.\Debug/TestUseVC.exe : fatal error LNK1120: 1 个无法解析的外部命令
我都改了,就有这样的错误,我的是vc2003的
能力值:
( LV12,RANK:410 )
10 楼
sorry,vc2003我没有测试,只有你自己调试看看了。
能力值:
( LV2,RANK:10 )
11 楼
最初由 wwwddd 发布:
我试用Myshell.exe(Myshell.asm编译的运行文件) 加壳,xp sp2上面的notepad.exe 加壳运行出错,而有些exe 文件则正常。
Spring.W:
是Bound import 处理的问题,解决方法是你可以将Bound import移动到后面的节中(需要注意应该要在双字边界上),也可以加壳前将Bound import删除。
请问:如何删除Bound import