首页
社区
课程
招聘
[原创]asm的魅力(二)
发表于: 2009-9-4 12:08 18585

[原创]asm的魅力(二)

2009-9-4 12:08
18585
Struct A
{
   Int charme;
}*a;

Struct B
{
  A c;
}*b
int	_ClientLogin( LPVOID _lpStruct)
{
  TranSocket	*stSock;
  ...
  int k = stSock->dwIndex;    //相当于取stSock.dwIndex 赋值给k
  ...
  return (0);
}
.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib

aa struct
   charme dd ?
aa ends

bb struct
    charme1 dd ?
    cc aa <>
    
bb ends

.data?
p2 bb <>  ;;;;;;;注意
p1 aa <>  ;;;;;;;;注意

szEAX      db 8 dup('0'),0

strr1 dd ? 
.data
strr db "charme",0
.code
ExchangCode	proc w32BitCode:DWORD,lpCode:DWORD
		push	ebx
		push	ecx
		push	esi
		mov	esi,lpCode
		mov	eax,w32BitCode
		mov	ecx,8
    @@nextchar:	push	ecx
		rol	eax,4
		mov	ebx,eax
		and	ebx,0000000Fh
		cmp	bl,09
		jle	@@char0_9
		add	bl,07h
    @@char0_9:	add	bl,30h
		mov	BYTE PTR [esi],bl
		inc	esi
		pop	ecx
		loop	@@nextchar
		pop	esi
		pop	ecx
		pop	ebx
		ret
ExchangCode	endp 
main proc
    mov p1.charme,20h
    mov ebx, p2.cc.charme
        
    push offset szEAX
    push ebx
    call ExchangCode
    
    push 40h
    push offset strr
    push offset szEAX
    push 0
    call MessageBox
    
    
    ;push 03e8h
    ;call Sleep
    
    push 0
    call ExitProcess
main endp
end main

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 8
支持
分享
最新回复 (23)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
asm的魅力怎么会是接近人类思维呢?高级语言干啥去了…
2009-9-4 12:32
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
3
汇编有时很直接,很方便。
有的时候,某些功能只有汇编能完成(比如改CR0,关中断,直接I/O,等等等等……)。但是说实话,不喜欢在不必要的情况下,故意使用汇编去“扭曲”程序。

btw,曾子曰:七月份的尾巴你是狮子座
2009-9-4 14:08
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
4
比如for(;;){}这样的循环,是C语言结构化的表示,,asm完全按人的思维想:
cmp eax,0
jl aa
aa:
   输出‘eax<0’
输出‘eax>=0’
完全是正常的思维流程,,只要代码表示下就可以 了

所谓的masm的伪指令:
.if eax>0
   xxxx
.else
yyyy
.endif
实际上这些伪指令做的就是优化结构的工作,和C是一样的道理。
只是我们习惯了,知道了if else这样的结构了,就觉得这样方便,,实际上不是我们的思维流程
asm是最贴切的思维流程
2009-9-4 14:08
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
5
可能你所的扭曲程序时指我发的第一篇,实际上第一篇的那个程序,我要表达的意思很多:堆栈,调用,指令替换,扭曲。。很多的意思,,这些要表达的东西放一起,可能会显得程序时在故意的扭曲,实际上没有那样的意思,所以我说那个程序别扭,但是得好好的看,会有收获的,,,你说的asm的应用时对的,,同感,,,
2009-9-4 14:11
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
恩。
强烈支持
2009-9-4 15:14
0
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
asm会了好处很多.至于再"深入"只不过是把asm当一个游戏玩而已.刚开始会觉得好玩有趣,最后玩熟了, 再去试试c/c++. 会觉得根本不是在写程序而是在"说话"
2009-9-4 15:58
0
雪    币: 393
活跃值: (100)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
再弱弱的说一句...= =! 楼主asm就两个月水平
2009-9-4 15:59
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
9
呼呼,过奖了,哪里有两个月啊,,只有一礼拜,,一礼拜都没有,,我根本不会。。

而且我也弱弱的说一句,我也就偶尔抽不玩asm的时候用vb.net写写管理软件,,,至于你说的玩玩c++那些高级的东西,,我想我比你玩的早吧,,什么是高级语言,我想我用的也不比你差。。

呼呼,,您真谦虚
2009-9-5 00:36
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
凑热闹123456
2009-9-6 16:56
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习之中~~
2009-9-6 19:10
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
非常弱的问句:你是什么水平?
2009-9-6 21:55
0
雪    币: 243
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持一下,写文章很累的!
期待 asm的魅力(三)
2009-9-7 13:03
0
雪    币: 205
活跃值: (12)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
不错. 语言只是个工具.喜欢哪个就用哪个.
2009-9-18 18:34
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
surport!!
2009-10-2 10:16
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
真累 呼呼。
一星期就能拿来做文章了 厉害。呼呼 。
2009-10-6 08:07
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
17
呼呼,,会说呼呼俩字的就是熟人喽,呼呼,,一星期达到这水平?呼呼,,你知道,,那是绝对不可能的,,呼呼
2009-10-6 11:04
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
深有感触,ASM就是业界的利刃!
2009-10-6 15:42
0
雪    币: 248
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
觉得楼主写得很不错啊。。。
2009-10-8 10:09
0
雪    币: 205
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
“顶 你”,期待A3
2009-11-8 06:38
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我也喜欢asm~
2009-11-15 10:14
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
22
mov eax,(M ptr [ebx]).p.a;; 居然还能这么用..学习了
2010-8-20 16:33
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
23
继续磨剑。。。。。。。。
2011-3-14 00:53
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
觉得有问题...
asm中没有->这样的操作符,那怎么实现b->c.charme这样的访问呢?只好是像上面这样写了
结果显示p2.cc.charme的值是0,意图来看应该是显示20h。
错误在哪里?
OD调试看看,可以很清楚的看到,内存空间中:
P1.charme--------------------------0400xxxxh
Charme1
P2.cc.charme----------------------0400yyyyh
根本就是两个变量,怎么可能访问到呢,,照这样看来我们这样修改下:
mov ebx, p2.cc.charme+4,就输出20h,但实际上这只是投机,只是跳过了charme1的空间,访问了下p1.charme,一点也不能通用。

本身你实例化的时候p1, 和p2就没有半毛钱关系吧...你在实例化aa结构的时候里面在实例化bb结构..也就是那个cc.....然后你通过对aa结构中的cc赋值...然后想从实例化的p1中拿出来...
他们本身就应该是两个对象吧....
并不会因为你
p2 bb <>  ;;;;;;;注意
p1 aa <>  ;;;;;;;;注意
这样声明..那么p1和p2中的cc是同一个内存区域...在逻辑上他们也应该是独立的啊....
2011-8-30 10:01
0
游客
登录 | 注册 方可回帖
返回
//