• 全部
  • 问答

汇编和32api我快烦死了!!我想杀人.....

GGJJyangjinhan 2009-07-30 08:51:35
那书上写的Win32API根本就不明白,从网上找32API的书不是C++的就是C的我想用汇编。
我就是想用汇编创建一个文件怎么就这么难。
msdn不会用什么都搜索不到。

下载的WIN32API也不好用。我快疯了......

谁敢告诉我Win32API怎么用



下面这个也没有例子看不明白
函数原型:LRESULT CALLBACK SOUNDSENTRYProc(DWORD dwMillisec,DWORD fdwEffect);

参数:

Millisec:指定可视化消息的持续时间,以毫秒为单位。该消息是在一个基于win32的应用程序(或运行在窗口的应用程序)发声时显示出来的。

tdwEffect:指定要显示的可视化消息的类型。当前值通常应为SSWF_CUSTOM。

返回值:如果可视化消息已经或将要正确显示,那么返回值为TRUE,如果消息异步,并当调用该函数时其状态无效,那么应该返回TRUE。如果出错使得消息无法显示,那么返回值为FALSE。若想获得更多错误信息,请调用GetLastError函数。
...全文
1496 点赞 收藏 115
写回复
115 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shaoxiaojing5193 2011-07-15
[Quote=引用 43 楼 ggjjyangjinhan 的回复:]
引用 40 楼 moliliang 的回复:
我来揭开谜团..
1.楼主没有学过C语言
2.如果楼主学过C语言,那么就是没有学过windows编程的
3.如果楼主学过windows编程,这些东西还不懂的话...找一个高点的楼层自行解决...0 0!

所以,建议楼主先把C语言学下,然后学习下windows API (SDK) 编程...

这些都不知道的话...还是别学了...基础……
[/Quote]
所以咯,LZ应该是先学8086,学完之后就学c,然后windows 程序设计,然后 32位汇编。。。这个顺序绝对是王道!
回复
竞择 2011-07-13
[Quote=引用 1 楼 moliliang 的回复:]
老老实实看书吧..孩子...这些东西以后就明白了.....

浮躁是人类的大敌啊...........
[/Quote]
浮躁是人类大敌啊..
回复
罗云彬有本汇编语言的书,用的是WIN32API
回复
fcly1981826ly 2011-07-11
潜力贴,留名,,,,,,,
回复
jueying1 2011-07-10
ahahahahah哈哈………………
回复
gehao92 2011-07-08
自食其力,自力更生。。。关于Api的大多都是C语言的。。。。自己去琢磨吧。。。
回复
stallm 2011-07-07
LRESULT 代表返回值,实质为int;
CALLBACK和stdcall一样。很简单的。
回复
pszfan 2011-07-07
gzgzlxg

牛人是也....学习
回复
ctluCTLU 2010-09-26
可怜,我什么都看不懂.....
回复
junkli 2010-09-03
学习了..
回复
microsoftboss 2010-09-03
感觉楼主基本功不扎实。还要深入。
回复
vcnewer 2010-09-03
一年前的?大哥
回复
anrong669 2010-09-03
有一本讲32位汇编的书
回复
desdouble 2009-09-23
占100楼,此帖有潜力!
回复
kangken 2009-09-22
[Quote=引用 22 楼 gzgzlxg 的回复:]
invoke只不过是一个宏,用来替代call,例如:

invoke ExitProcess, eax

  push eax
  call ExitPorcess
是完全相同的。
invoke ????, xx1 ...., xxn ;这个宏,通过编译链接之后,生成的代码就是:
  push xx1
....
  push xxn
  call ????
当然,将来学下去,会知道,API函数的调用方式还是有些不同的,大多数的API函数都是stdcall格式,不过还是有少数的是其他的格式,如fastcall或C格式的,尤其是使用c库时,基本都是C格式的。
至于什么是stdcall、fastcall、c的格式,还有一些其他的格式,找本书翻翻就明白了,其实无非是入栈的顺序或栈平衡的方式不同而已。
  push  xx1
......
  push  xxn
  call  ????

  push  xxn
......
  push  xx1
  call  ????

  push  xx1
......
  push  xxn
  call  ????
  add  esp, n  ; 对于C格式的调用,需要自己来平衡堆栈,入栈多少参数,后面esp堆栈指针就加多少。
                  ; 不过要注意参数的长度。
所有的东西都没有什么神秘的,无非就是来回捣腾那些个堆栈而已。
[/Quote]

应该是从xxn开始push吧。
回复
dbgchen 2009-09-21
那学习汇编,硬件基础知识要到达一个什么样的平台才好?
回复
zhengjiaxi83 2009-09-21
多上网查查资料,应该能查出来。哈哈
回复
sll0807 2009-09-16
[Quote=引用 26 楼 gzgzlxg 的回复:]
引用 23 楼 ggjjyangjinhan 的回复:
比如用INVOKE之后还可以用ADDR abc传递什么参数给abc吗,应该传递什么参数给abc
addr 是引用地址的含义,例如:
.code
  abc db 'abcdefghijklmnopqrstuvwxyz',0

.code
  invoke MyLikeEatABC, addr abc

就相当于

  mov  eax, offset abc  ; addr 的具体做法
  push eax
  call MyLikeEatABC

  lea  eax, abc
  push eax
  call MyLikeEatABC

[/Quote]

addr 只会是 lea eax, abc 不可能是 mov eax, offset abc
offset 不可用做局部变量

例:

.386
.Model Flat,StdCall
Option Casemap :None

Include Windows.inc
Include User32.inc
Include Kernel32.inc

IncludeLib User32.lib
IncludeLib Kernel32.lib

.Data
szClassName db "Class",0 ;全局变量

.Code
Start Proc
Local szBuff[128]:BYTE ;局部变量

mov esi,offset szClassName
invoke RtlZeroMemory,addr szBuff,128 ;局部变量
invoke MessageBox,0,addr szClassName,0,0 ;全局变量

ret
Start EndP

End Start
反汇编以后 是这样的

00401000 >/$ 55 push ebp
00401001 |. 8BEC mov ebp, esp
00401003 |. 83C4 80 add esp, -80
00401006 |. BE 00304000 mov esi, 00403000 ;mov esi,offset szClassName
0040100B |. 68 80000000 push 80
00401010 |. 8D45 80 lea eax, dword ptr [ebp-80] ;addr szBuff
00401013 |. 50 push eax
00401014 |. E8 19000000 call <jmp.&kernel32.RtlZeroMemory>
00401019 |. 6A 00 push 0
0040101B |. 6A 00 push 0
0040101D |. 68 00304000 push 00403000 ;addr szClassName
00401022 |. 6A 00 push 0
00401024 |. E8 03000000 call <jmp.&user32.MessageBoxA>
00401029 |. C9 leave
0040102A \. C3 retn




回复
etracer 2009-09-14
学习-ing....
回复
gzgzlxg 2009-09-14
还不给分,你没有见这些日子我已经不给你其他的问题回帖了。
世上没有免费的午餐,呵呵。吼逅。
回复
加载更多回复
相关推荐
综教楼后的那个坑用双向链表实现 描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *            * :    *            * 8    *    **      * 7    *    **      * 6    *    **      * 5    *    ********* 4 <- 高度    *    ********* 3    ************** 2    ************** 1 平面 |  1  |2|   3    | 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。   请你计算每个平面被水覆盖的时间。    灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * .... * *~~~~~~~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~**~~~~~~* *~~~~**~~~~~~* * ********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* ************** ************** ************** ************** ************** **************    4 分钟后    26 分钟后        50 分钟后    平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入   输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。 输出   输出每个平面被水覆盖的时间。
发帖
汇编语言
创建于2007-08-27

2.0w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2009-07-30 08:51
社区公告
暂无公告