关于vc6。0 一个mov语句的问题
放在内存的是偏移地址,为什么结果是将符号b赋值给了变量 不明白你想问什么
人造人 发表于 2017-4-8 17:09
不明白你想问什么
就是请问下为什么
mov word ptr ,offset main+80h(00401210)
这句实现了
wchar_t b='b'的功能?
我对这句的理解是 仅仅将一个偏移地址赋给了变量b haha_91 发表于 2017-4-8 17:21
就是请问下为什么
mov word ptr ,offset main+80h(00401210)
这句实现了
看看这个地址有什么
main+80h(00401210)
本帖最后由 haha_91 于 2017-4-8 18:43 编辑
人造人 发表于 2017-4-8 17:51
看看这个地址有什么
main+80h(00401210)
久等了,今天图片上传多了 我就手打成文本好了:
0040120D mov dowrd ptr ,1C680062h
0040120F call 1CA81276
00401210 bound eax,qwordptr
00401211 add byte ptr,ch
红色字的就是那个地址的内容黑字的是它的上下文(不知道有没用) haha_91 发表于 2017-4-8 18:34
久等了,今天图片上传多了 我就手打成文本好了:
0040120D mov dowrd ptr ,1C680062h
004 ...
不对吧? 上面和下面没有关系呀
发一下完整的汇编代码
我这边是这样的
1: #include <stdio.h>
2:
3: int main(void)
4: {
00834130push ebp
00834131mov ebp,esp
00834133sub esp,0CCh
00834139push ebx
0083413Apush esi
0083413Bpush edi
0083413Clea edi,
00834142mov ecx,33h
00834147mov eax,0CCCCCCCCh
0083414Crep stos dword ptr es:
5: wchar_t b = 'b';
0083414Emov eax,62h
00834153mov word ptr ,ax
6:
7: return 0;
00834157xor eax,eax
8: }
00834159pop edi
0083415Apop esi
0083415Bpop ebx
0083415Cmov esp,ebp
0083415Epop ebp
0083415Fret 本帖最后由 萌新鱼油 于 2017-4-8 19:58 编辑
人造人 发表于 2017-4-8 19:00
上面和下面没有关系呀
发一下完整的汇编代码
专门弄个新号只为发图- -||
图2是指定地址查看到的代码
因为图1只显示了1句(不知道为什么只显示一句抓头)
你的汇编代码怎么和我显示的不一样!!!
是和我的软件环境不同么(我用的软件图1已截图,是vc6.0),还是说我查看汇编代码的方式错了?
萌新鱼油 发表于 2017-4-8 19:45
专门弄个新号只为发图- -||
查看内存地址 0040102c 的值
用内存窗口
类似于下面这样
你在vc6下看看有没有
本帖最后由 萌新鱼油 于 2017-4-8 20:39 编辑
人造人 发表于 2017-4-8 20:26
查看内存地址 0040102c 的值
用内存窗口
可以查看,但图片又发不了了继续手动转文本
内存内容如下
0040102C 62 00 5F 5E 5B 8B E5
00401033 5D C3 CC CC CC CC CC 萌新鱼油 发表于 2017-4-8 20:38
可以查看,但图片又发不了了继续手动转文本
内存内容如下
我认为是vc6反汇编的问题
查看一下内存地址 0401028 的数据 人造人 发表于 2017-4-8 20:42
我认为是vc6反汇编的问题
查看一下内存地址 0401028 的数据
00401028内存查询如下
00401028 66C745FC62005F
0040102F 5E5B 8BE55DC3CC 萌新鱼油 发表于 2017-4-8 20:52
00401028内存查询如下
00401028 66C745FC62005F
人造人 发表于 2017-4-8 21:19
在没运行到该语句的时候查看内存仍然一样:
00401028 66C745FC62005F
0040102F 5E5B 8BE55DC3CC 萌新鱼油 发表于 2017-4-8 20:52
00401028内存查询如下
00401028 66C745FC62005F
a.asm
db 0x66, 0xc7, 0x45, 0xfc, 0x62, 0x00, 0x5F, 0x5e, 0x5b, 0x8b, 0xe5, 0x5d, 0xc3, 0xcc
用nasm 编译
nasm a.asm -o a.obj
用ndisasm 反汇编
ndisasm -b 32 a.obj
0000000066C745FC6200 mov word ,0x62
000000065F pop edi
000000075E pop esi
000000085B pop ebx
000000098BE5 mov esp,ebp
0000000B5D pop ebp
0000000CC3 ret
0000000DCC int3
0000000066C745FC6200 mov word ,0x62
可以看到是把0x62写到 ebp-0x4 的位置
看来是vc6翻译错了?
mov word ptr ,offset main+80h(00401210)
不过现在又发现一个问题,为什么是ebp - 8
? 好吧,图片上是ebp - 4
是我复制错了
人造人 发表于 2017-4-8 21:42
好吧,图片上是ebp - 4
是我复制错了
额所以说是VC6.0的翻译错误么?
非常感谢 这个问题困惑好几天了 原来软件汇编代码竟然会翻译错
不光解决了问题还偷偷发现了个工具nasm额外收获以后看不懂的汇编原来可以根据内存 反出汇编语句
好想加你好友可是等级太低 权限不够看来我以后要多多水贴,不对 多多回帖只为能和大佬做朋友~~! 萌新鱼油 发表于 2017-4-8 21:56
额所以说是VC6.0的翻译错误么?
我也不知道是不是vc6翻译错了,vc6翻译成那样,我看不懂
改用vs2015吧,vs2015好用^_^
人造人 发表于 2017-4-8 22:03
我也不知道是不是vc6翻译错了,vc6翻译成那样,我看不懂
改用vs2015吧,vs2015好用^_^
嗯 喜欢用VC是因为它小vs以前装过1次 安装就用了1个多小时(可能机子太烂),据说VS稍微没装好 系统就有影响所以有阴影 haha_91 发表于 2017-4-8 22:50
嗯 喜欢用VC是因为它小vs以前装过1次 安装就用了1个多小时(可能机子太烂),据说VS稍微没装好 系统 ...
哦
页:
[1]