| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2712 人关注过本帖
标题:汇编代码转换为高级语言伪代码,请前辈们看看有错不
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
已结贴  问题点数:10 回复次数:32 
汇编代码转换为高级语言伪代码,请前辈们看看有错不
程序代码:
00432491  |> /FF37          /push    dword ptr [edi]                 ; /MutexName
00432493  |. |6A 00         |push    0                               ; |InitialOwner = FALSE
00432495  |. |6A 00         |push    0                               ; |pSecurity = NULL
00432497  |. |FF15 4C514D00 |call    dword ptr [<&KERNEL32.CreateMut>; \CreateMutexW
0043249D  |. |85C0          |test    eax, eax
0043249F  |. |8906          |mov     dword ptr [esi], eax
004324A1  |. |74 14         |je      short 004324B7
004324A3  |. |FF15 48514D00 |call    dword ptr [<&KERNEL32.GetLastEr>; [GetLastError
004324A9  |. |3D B7000000   |cmp     eax, 0B7
004324AE  |. |75 20         |jnz     short 004324D0
004324B0  |. |8BCE          |mov     ecx, esi
004324B2  |. |E8 A4010500   |call    0048265B
004324B7  |> |83C7 04       |add     edi, 4
004324BA  |. |3BFB          |cmp     edi, ebx
004324BC    ^\7C D3         jl      short 00432491                   ;  if edi<ebx then goto 432491


下面是高级语言伪代码。请前辈们看看小生转换得有错不?谢谢!
程序代码:
Label00432491:
eax=CreateMutexW(0,0,dword ptr[edi])
dword ptr[esi]=eax
if(eax and eax) then
    edi=edi+4
    if edi<ebx then goto Label00432491
else
    eax=GetLastError
    if eax<>0 then
       goto other
    else
       exc=esi
       call 0048265b
       edi=edi+4
       if edi<ebx then goto Label00432491
    end   
end



[ 本帖最后由 ioriliao 于 2010-9-18 11:45 编辑 ]
搜索更多相关主题的帖子: 高级 汇编 代码 前辈 语言 
2010-09-18 11:43
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:5 
程序代码:
eax=GetLastError
    if eax<>0 then  XXXX         if eax == 0xb7  (0xb7 ==ERROR_ALREADY_EXISTS)  就是判断互斥对象是否已存在

exc=esi
       call 0048265b            //这个跟进去看看就是CloseHandle,  如果已存在则关闭。

83C7 04       |add     edi, 4
004324BA  |. |3BFB          |cmp     edi, ebx                   //ebx,字符串数组尾部指针. edi == ebx 就表示处理完了
004324BC    ^\7C D3         jl      short 00432491


所以用pascl语言表示就是:
程序代码:
function CreateMutexObjAndCheck:HANDLE;stdcall
var
  strMutexArry: arry[0..2] of WString;
  hMutex: HANDLE;
  i: integer;
begin
   for i = 0 to 2 go
   begin
     hMutex:= CreateMutex(0,false,strMutexArry[i]);
     if hMutex = 0 then
       continue;                             //如果创建失败,直接跳转创建下一个              

     if hMutex = ERROR_ALREADY_EXISTS then
     begin
        CloseHandle(hMutex);                    //如果已存在?关闭
        hMutex:= 0;                            
     end
     else
       break;                                  //不存在,,成功,退出
   end 

Restule:= hMutex;
end;


BTW:
以后别在C上喊我了,被学弟们看到都传成笑话了。我以后也不再上C了。



[ 本帖最后由 东海一鱼 于 2010-9-20 11:04 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-18 13:12
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 2楼 东海一鱼
现在多开是没问题了,却仍然是会掉线,还不知道乍搞啊,头都快晕了
东海兄救救我也。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 15:56
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
求求东海大仙超渡下本妖吧。。。实在无法了。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 19:30
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
东海仙人快快出现吧。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-19 16:22
sll0807
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:69
专家分:123
注 册:2009-3-2
收藏
得分:5 
00432491  |> /FF37          /push    dword ptr [edi]                 ; /MutexName                    ; EDI为名称指针
00432493  |. |6A 00         |push    0                               ; |InitialOwner = FALSE         ; InitialOwner = FALSE
00432495  |. |6A 00         |push    0                               ; |pSecurity = NULL             ; MutexAttributes = null  参数进栈
00432497  |. |FF15 4C514D00 |call    dword ptr [<&KERNEL32.CreateMut>; \CreateMutexW                 ; 调用 CreateMutexW       调用API
---------------------------------------------------------------------------------------------------
0043249D  |. |85C0          |test    eax, eax                        ; 测试CreateMutex返回值,如果执行成功返回句柄,失败返回0
0043249F  |. |8906          |mov     dword ptr [esi], eax            ; 保存返回结果到ESI寄存器
004324A1  |. |74 14         |je      short 004324B7                  ; 如果CreateMutex返回值不等于0 则跳转 到 004324B7
---------------------------------------------------------------------------------------------------
004324A3  |. |FF15 48514D00 |call    dword ptr [<&KERNEL32.GetLastEr>; [GetLastError
                                                                     ; 调用 GetLastError
004324A9  |. |3D B7000000   |cmp     eax, 0B7                        ; 比较 GetLastError 返回值是否等于  ERROR_ALREADY_EXISTS
                                                                     ; 就是判断互斥体对象的名字是否作为唯一实例运行
004324AE  |. |75 20         |jnz     short 004324D0                  ; 当 GetLastError 的返回结果不等于  ERROR_ALREADY_EXISTS  的时候跳转到 004324D0
                                                                     ; 上面三句就是检测 互斥体对象是否是唯一的
----------------------------------------------------------------------------------------------------
                                                                     ; 从上面程序来看 在互斥体对象创建不成功的情况下会运行到这里
004324B0  |. |8BCE          |mov     ecx, esi                        ; 如果运行到这里 mov ecx,esi 以后 ecx的值应该 = 0
004324B2  |. |E8 A4010500   |call    0048265B                        ; 调用 子程序 ;子程序里执行什么不明确  ????
004324B7  |> |83C7 04       |add     edi, 4                          ; 给edi + 4
004324BA  |. |3BFB          |cmp     edi, ebx                        ; 将edi 和 ebx 做减法测试
004324BC    ^\7C D3         jl      short 00432491                   ; 当ebx > 4的时候跳转



反汇编以后的指令根本就没发全 根本不明确做什么

以上代码 大概描述情景就是 CreateMutex 不成功 后怎么处理



[ 本帖最后由 sll0807 于 2010-9-19 19:42 编辑 ]
2010-09-19 19:38
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
谢谢sll0807兄的热情帮助。
我的这个问题起源于下面的描述:
软件名称:yy语音聊天工具
官页:http://yy.
限制性:这个软件在一台电脑上只能开三个实例
       实验及分析:
                 实验工具:沙盘、Oracle VM VirtualBox虚拟机(2003系统)
                 实验过程1:
                         1.在真实的操作系统开启三个号
                         2.使用沙盘开启三个号
                         3.在虚拟机上开启三个号
                 结果:都没有掉线
                 实验过程2:
                         1.在真实的操作系统开启四个以上的号
                         2.使用沙盘开启四个以上的个号
                         3.在虚拟机上开启四个以上的个号
                 结果:1.在真实的操作系统多开的号会掉线
                      2.沙盘多开的号会掉线
                      3.在虚拟机多开的号会掉线


/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-19 22:48
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用ioriliao在2010-9-19 16:22:54的发言:

东海仙人快快出现吧。。。
   东海大仙腐败去了,刚回来得说。哈哈

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-20 00:26
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
还没搞定啊?挡在哪了?

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-09-20 00:30
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 8楼 东海一鱼
仙人终于回来了啊,现在是可以多开了,但会掉线,不知道问题在哪。
我就是把这句给改了
0043246A  |.  BB 94835100   mov     ebx, 00518394;这里的数字改大很多。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-20 07:59
快速回复:汇编代码转换为高级语言伪代码,请前辈们看看有错不
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023592 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved