测试你的C语言功底
在实际的教学中,我们发现很少有真正精通了C语言编程的学员,一般都有或多或少概念不是完全清楚的问题,特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义指向函数的指针类型,这也是导致学习VC++困难的一个原因。下面有几个简单测试将能发现你对C语言的掌握情况。
1、如何在下面的test函数里加入代码可以使程序运行起来输入和输出的相等?
(环境是vc6Debug方式下)
#include<stdio.h>
voidtest()
{
intt;
scanf("%d",&t);
在这里加入代码
}
voidmain()
{
intm;
test();
printf("m=%d",m);
}
不知道应该如何写这段代码,最后用嵌套汇编的方式编写代码.
#include<stdio.h>
void test()
{
int t;
scanf("%d",&t);
//在这里加入代码
_asm
{
mov esi,t
pop edi
mov [edi-4],esi
push edi
}
}
void main()
{
int m;
test();
printf("m=%d",m);
}
不知道方法是否正确,有高手知道的话,请指教.
还是看看backer给出的答案吧!
这一题需要去了解在函数体中栈内存的分配情况。
#include<stdio.h>
void test()
{
//当程序流程进入test函数入口的时候也会对变量作一些寄存器的保护和预留空间
//push ebp
//mov ebp,esp
//sub esp,48h
//push ebx
//push esi
//push edi
//lea edi,[ebp-48h]
//mov ecx,12h
//mov eax,0CCCCCCCCh
//rep stos dword ptr [edi]
// 预留了0x12*sizeof(DWORD)个字节空间
// 变量t的地址为ebp-4
int t;
scanf("%d",&t);//?请在以下添加代码,使用main函数中的变量m输出值等test函数中的变量t;
//计算变量t在内存中的位置和上一层函数中变量m在内存中位置的差
//先写到这一句用反汇编看一下
//变量t和m都在预留空间的最下端(堆栈是向上长的,变量是按定义先后也是从下向上放的)
//push edi(main)...............................0x1
//push esi(main)...............................0x2
//push ebx(main)...............................0x3
//push ebp(自己)...............................0x4
//返回地址............................................0x5
//0x10*sizeof(DWORD)的空间............................0x15
//空间最下面的DWORD字节存放变量m......................0x16
//我们把t向下偏移0x16的位置(存放着变量m)上把t的内容写进去即可。
//也可以看一下OD里图:
*( &t + 0x16) = t;
//这样整型指针pos就指到了变量m我们把t的值直接赋给*p(就是m)即可。
}
int main()
{
//当程序进入main函数的时候,会对一些局部变量作一些预留空间
// push ebp
// mov ebp,esp
// sub esp,44h
// push ebx
// push esi
// push edi
// lea edi,[ebp-44h]
// mov ecx,11h
// mov eax,0CCCCCCCCh
// rep stos dword ptr [edi]
// 预留了0x11*sizeof(DWORD)个字节空间
// m的变量地址是ebp-4
int m;
test();
printf("m=%d",m);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
卵叶海桑--一个遗传多样性贫乏的红 树植物物种,周仁超,裘索,地理广布的异交繁育系统的木本植物往往具有高水平的遗传多样性。本研究测定了来自中国和泰国的红树植物卵叶海桑的三个叶绿体片段
在典型的使用中,一个普通的文件系统被挂载在s3backer文件系统使用环回挂载(或 Mac OS X 上的磁盘映像挂载)导出的文件之上。 与更完整的 S3 文件系统实现相比,这种安排有几个好处: 通过不尝试实现一个完整的...
git clone https://github.com/jonathan-backer/sps-2021.git cd; git clone https://github.com/jonathan-backer/sps-2021.git 运行服务器: cd ~/sps-2021/team_project mvn package exec:java 点击 图标,...
Linux设备驱动程序和实用程序,用于Danmere(现在为4-TV)生产的Backer视频磁带备份设备。
airplay最新的版本了,内面包括airplay.c、airplay_parser.c、airplay_parser.h、plist_parse.c、airplay_parser_callback.c几个重要实现文件,苹果用的二进制文件是binplist,解析已经封装到plist_parse.c里面,新测...
本人用了十多年,简洁、小巧、速度极快,如管理文件夹一样,从未出现过邮件丢失。特别是不同编码的邮件内容,很容易切换编码格式,几乎可以处理所有乱码的邮件。
我们对世界的感知是基于多种模态的,例如,触觉、视觉、听觉、嗅觉和味觉。...经验上,认识到多模态模型不能总是优于单模态模型,特别是在高噪声中(Scheunders & De Backer,2007; Eitel等人,2015; Si
针对手指静脉图像在移动互联网下传输中可能出现的不安全因素,首先对手指静脉图像的提取进行了改进,采用基于灰度形态学的膨胀运算、加权方式、模糊增强和灰度拉伸的方法获得更加清晰的图像,再对静脉图像采用基于小...
在BackerKit上跟踪您的项目。 **当前处于试用状态**作为支持者,您可以登录BackerKit,并在访问的Kickstarter项目页面上方的栏中查看是否有需要关注的调查。您也可以直接在Kickstarter或Indiegogo广告系列页面上查看...
支持者 通过Twitter自动感谢支持者,赞助者和赞助者。 预习: 安装 这是一个Python OpenFaaS函数,用于响应Patreon... 在Patreon上将Webhook设置为将在其中运行函数的URL。 保存网络挂钩并记下秘密 第2步-密封新秘密 #
用于创建卡车和停靠对象并使用键盘箭头进行模拟的结构。 Truck.m:模拟带有驾驶室和卡车的卡车的处理对象。 Dock.m:模拟停靠点的句柄对象。 logic.m:为此问题创建模糊逻辑控制(有关如何使用其他模糊文件的更多...
Backer,J .; Sips,P。动态心电图监测和意识小鼠的异位搏动检测。 传感器2020,20,3867。 目录 安装: 该代码是在MATLAB R2019b中编写和测试的。 运行脚本仅需要安装Signal Processing Toolbox。 特征 开发的脚本...
Changes in 2.4.6 (February 22, 2011): Brief summary : - Support more host OS to run on: - Include win64 native binary in the release. - Fixed failures on big endian hosts. - BIOS: Support for up to...
数据存储加密技术是以防止在存储环节上的数据失密为目的,可分为密文存储和存取控制两种;数据传输加密技术的目的是对传输中的数据流加密,常用的有线路加密和端口加密两种方法;数据完整性鉴别技术的目的是对介入信息...
seata-server-1.4.1.tar.gz
:red_heart: 测试覆盖:保持100%的压力! 组态 将您的配置放在.github/opencollective.yml 。 collective : graphql-shield tiers : - tiers : ' * ' labels : ['backer'] message : ' Hey <link> ' - ...
安德鲁·希曼(Andrew Seaman),布克·马丁(Booker Martin),伊恩·格林(Ian Green),维罗妮卡·贝克尔(Veronica Backer-Peral) 介绍 自定义酒店不幸失利后,我们希望将可自定义的语言专用于堕落的威彻斯特...
uibot rpa高级认证C卷
概述 在经历了构建定制excel的痛苦之后,创建了此文件,以计算公寓的总拥有成本和贷款金额。 这是一个网页,您可以在其中输入新公寓的定价信息,计算标准贷款额,...版权所有2018 Anoob Backer。 根据许可发布的代码。
edgedriver-win64 120.0.2210.61.zip