printf_s在debug模式下打印未初化变量

今天在调试内核输出的时候发现的

printf_s在打印已经初始化的变量的时候正常输出,但是在打印未初始化的时候出现未料到的数据。

原码是这样的

char buf[15];
    DWORD bfread;
    ReadFile(device, buf, 10, &bfread, NULL);
    for (int i = 0; i < 10; i++)
    {
        printf_s("%x\n", buf[i]);
    }

输出成了这样

按理一个char为一个字节,输出不可能4个字节,于是我用OL打开

这是主入口函数

关键在于movsx这个指令,他扩展了一个符号位字节放到EAX里,然后打印出来。

这样就明显了,实际printf_s函数会在打印之前将数据符号扩展为32位再打印出来。

那么我继续,如果初始化了,那么在何时初始的呢,改变原码再打开

在原码定义处初始化,并非按照我原来的预想在主函数一开始初始化~~

时间: 2025-01-15 09:23:25

printf_s在debug模式下打印未初化变量的相关文章

DEBUG模式下, 内存中的变量地址分析

测试函数的模板实现 [cpp] view plain copy /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #define MY_TEMPLATE_H_2016_0123_1226 template<int iArySize> void fnTestDataType() { char szBuf[iArySize] = {'\0'}; unsigned short wT

Django -&gt; debug模式下的静态文件服务(/media/)

正式发布django项目的时候,如果存在静态文件(一般会统一放在名称为media或static的目录下),则需要建立url到文件系统的映射,例如,使用nginx的时候我们需要进行这样的配置. # Django media location /media { alias /home/lyndon/github/Mathematician/dijkstra/media; } location /static { alias /home/lyndon/github/Mathematician/dijk

Debug模式下编译溢出问题

问题: 代码在Debug模式下编译报出内存溢出的错误,而Release模式下则没有. 由于Debug模式下包含调试信息,并且不作任何优化.而Release模式进行了各种优化,内存检测等操作均省去,使得程序在代码大小和运行速度上都是最优的. 方法1: 猜测Release对代码进行了优化或者根本就没有进行内存检测,才导致Release模式下编译通过的.于是我进行了代码缩减,删除没有用的变量,问题仍然没有解决. 方法2: 我发现在Debug模式下,main.c文件淡黄色, ,Release模式下仍然为

eclipse在debug模式下自动跳到ThreadPoolExecutor解决方案

困扰了很长时间的一个问题,以前没有自己研究,今天终于解决了. 使用eclipse时,如果tomcat设定的是热加载,当修改一些程序后,tomcat自动加载修改内容..... 但是很多次都会自动跳到debug模式,很是讨厌... 原因是eclipse的设置问题:默认[Suspend execution on uncaught exceptions]是选中的,则eclipse在遇到未捕获的异常时会停止..... 修改方法,就是去掉选中的checkbox即可 参考文章:http://hi.baidu.

在Debug模式下中断, 在Release模式下跳出当前函数的断言

在Debug模式下中断, 在Release模式下跳出当前函数的断言 #ifdef DEBUG #define __breakPoint_on_debug asm("int3") #else #define __breakPoint_on_debug #endif // 验证 #define UXY_ASSERT_RETURN_ON_RELEASE( __condition, __desc, ... ) \ metamacro_if_eq(0, metamacro_argcount(__

eclipse的debug模式下启动不了tomcat

使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat. 这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文件错误,eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法把breakpoints veiw都删除就好了,步骤如下:window->show view->Breakpoints.在Breakpoints视图中右键,Remove all

如何启动JDBC Debug模式,打印JDBC诊断日志

1.下载Debug版本jar包 首先要下载一个Debug版本的JDBC jar包,Debug版本的jar包命名形式为jdbcX_g.jar(如下图所示),如Oracle11g的Debug版本的jar包为jdbc6_g.jar.点击这里下载:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html 2.启动Logging模式 第一种方式:设置运行环境变量java -Doracle.jd

Django -&amp;gt; debug模式下的静态文件服务(/media/)

正式公布django项目的时候,假设存在静态文件(通常会统一放在名称为media或static的文件夹下),则须要建立url到文件系统的映射,比如.使用nginx的时候我们须要进行这种配置. # Django media location /media { alias /home/lyndon/github/Mathematician/dijkstra/media; } location /static { alias /home/lyndon/github/Mathematician/dijk

Android studio build.gradle配置,debug模式下使用正式版签名,重命名apk

在build.gradle文件中,android节点下进行配置. android { compileSdkVersion 22 buildToolsVersion '22.0.1' signingConfigs { release { keyAlias 'xxx' keyPassword 'xxxxxxxxxxxx' storeFile file('./xxx.keystore') storePassword 'xxxxxxxxxxxxxxxx' } config { keyAlias 'xxx