Crypto++ multibyte/unicode issue - c++

I'm using Crypto++ library in my project but I've the following message:
In memory integrity check failed. This may be caused by debug
breakpoints or DLL relocation.
And Visual Leak Detector detect lots of memory leaks, but I'll dctor are corectly called.
I've build Crypto with msvc-2010 (MultiByte) and I'm using cryptopp from anothre library (UNICODE)
Is this dangerous?

In memory integrity check failed.
It sound like you are using one of the pre-built FIPS libraries available for the Crypto++ website. (That's where I've seen this most often).
If so, you need to develop your program with the same version that was used to build the DLL. That's probably Visual Studio 6, or Visual Studio 2002/2003 or so. You will have lots of memory problems if you try to use it with Visual Studio 2010 ro 2012.
And Visual Leak Detector detect lots of memory leaks, but I'll dctor are corectly called.
Ignore these. Microsoft has an unfixed bug in that damn thing dating back to the Visual Studio 6 days. You can find the bug report if you search Microsoft Connect. Its talked about on the Leak page from the Crypto++ wiki.
I've build Crypto with msvc-2010 (MultiByte) and I'm using cryptopp from anothre library (UNICODE)
The other library must be built using Visual Studio 2010 also. UNICODE is OK, but you will need to handle the MBCS/UNICODE conversions. See Character Set Considerations on the Crypto++ wiki.

Related

Missing MSVCP120D.dll but don't have Visual Studios anymore

I dug up an old project of mine from college when we exclusively used Visual Studios, and I'm looking to run it again. I don't have the exe anymore, just the debug version. When I run the debug version, I get the missing MSVCP120D.dll error. I have no way to recompile this into the release version. Is there a way for me to download the missing dlls, without downloading Visual Studios?
Incase you didn't know, MSVCP120D.dll is a dynamic link library for the IDE "Microsoft Visual C++ 12.0", which I believe is from Visual Studio 2013.
If you know the version of Visual Studio that you used (You specified 2010 and 2012 in the tags), you can use the following link to download the toolchain, Visual C++: https://support.microsoft.com/en-gb/kb/2977003
Another option is reverse-engineering, but this will be an incredibly difficult process and cannot give you the source that you originally used to create the debug version. Your best bet is to find the version you're after, if not re-writing it.
This installation, should you have the administrator privileges to perform it, should cause the error to cease, as your system will be able to find it in Sys32/Syswow64.
Edit: I would be vary wary to download a .dll from any other site other than Microsoft's official site, malicious DLLs are readily available from dodgy sites.

jvm.dll seems incompatible with Visual Studio 2013

I am dynamically loading (server) jvm.dll into my 64-bit Visual Studio 2013 C++ application using LoadLibrary(), in order to execute native Java code using JNI.
In the VS debugger, I am getting a number of access violations as the dll is being loaded (yet things seem to work if I 'continue' after these); and then a hard crash when some JNI calls are being invoked. I have tried jvm.dll's from Java 1.7 and Java 1.8, with the same issues.
I suspect the issue to be runtime library incompatibility. Dependency walker indicates that even the latest jvm.dll depends on msvcr100.dll (from Visual Studio 2010). I have heard dire warnings of the consequences of using incompatible runtime versions; and have seen the results first hand in other instances.
Has anyone else run into this problem? Is there any version of jvm.dll available that is compiled against Visual Studio 2013?
Thanks,
Dan
Just recently (Feb 2015) I compiled a JNI application which invokes the JVM to run a Java program. I used the most recent JRE version (1.8.0_31) and Visual Studio 2013. I am also loading the jvm.dll at runtime. Take a look at this post if you want to see how I setup my JNI calls.
So it is possible...
Make sure that the JRE containing jvm.dll is built for the same architecture (32bit or 64bit) as your Visual Studio project. If you are using 64bit, you may need to add the x64 as your configuration. To do this go to:
Solution --> Properties --> Configuration Properties
Also make sure your includes/libraries are correct.
For my project, I needed to include the following:
C:\Program Files\Java\jdk1.8.0_31\include
C:\Program Files\Java\jdk1.8.0_25\include\win32
Also, I needed to include jvm.lib which is located at:
C:\Program Files\Java\jdk1.8.0_31\lib
Make sure you also add the jvm.lib to your linker input. Alternatively you can use the preprocessor:
#pragma comment(lib, "jvm.lib")
Hopefully, this should help get your project configured right. If you are still having errors, I would recommend uninstalling Java completely, and re-installing after. Perhaps the same with Visual Studio 2013 as well...

Can't Compile Solution in Debug Mode Because MSVCR100D.dll is Missing

I am running Microsoft Visual Studio Express 2012 for Windows Desktop on a 64 bit machine with windows 8.
I create a completely new Win32 Console Application (in C++) and accept the default options. I then build and run the solution in both debug and release modes and it works all find and dandy. Next I configure the include and library directories for the dynamic SFML library. I link to the debug and release .lib files and put the debug and release .dll files in the proper directories. I then add some simple code which uses the library, build and run the application in debug mode and I get this error: "The program can't start because MSVCR100D.dll is missing from your computer. Try reinstalling the program to fix this problem." If I build and run the application in release mode it works with no errors. (And yes I have the redistributables installed 32 and 64 bit.) Now from what I understand and according to this thread that .dll file is for debugging only and is not included in the redistributable package (which would explain why it doesn't work in debug mode). The answer says that developers have it installed with visual studio by default. This is obviously not the case as evidence from the error and I've reinstalled visual studio and restarted my computer twice now.
In conclusion, how do I simply compile my solution in debug mode without getting this error?
I'm afraid someone will mark this as a duplicate so here we go:
LINK - "...you appear to be linking to the debug version of the runtime, it is not normal to distribute apps linked against the debug version of the runtime."
Doesn't pertain to me because I'm not distributing this app, just trying to run it in debug mode.
LINK - "I compiled my program using Microsoft visual c++ 2010 Express Edition and tried to run it on another machine that did not have the same compiler."
This person get's the error when he runs what hes compiled on a different computer, not when actually compiling the application.
LINK - "If you get this error for your release build..."
I dont.
LINK - "You can compile your project in "Release"..."
My project is not ready to be released therefore I should compile my project in debug mode.
MSVCR100D.dll is the dll for Visual Studio 10, so somewhere something is depending on it (the SFML dlls?). Whatever you compile (in debug mode) with Visual Studio 2012 will require MSVCR110D.dll, which you should have available on your machine as part of the installation.
I suggest you build SFML yourself on your own version of Visual Studio, it's pretty easy. In fact, the binaries available on the site as part of the SFML 2.0 RC are rather old and you'll do yourself a huge favor by building from the latest sources, as a lot of fixes and improvement were applied in the meantime.
(Also, definitely use 2.0 instead of 1.6. The site is rather misleading, but on the SFML forums virtually everyone will recommend you use the last version)
This message generally states that the dll is referred to directly or indirectly in your application and is missing.
The 'D' at the end show us this is the Debug version of the file, this is DLL file is provided with the Visual Studio 2010 installation. So the MSVCR100D.dll would be provided with the installation of Visual Studio 2010.
Of course, you could be missing other versions 2008 (MSVCR90D) 2010 (MSVCR100D) 2012 (MSVCR110D) or the 2013 (MSVCR120D), each dll is provided according to the Visual Studio version.
There are a few ways to solve this:
Check to be sure that you're compiling all the components of your
project in Release mode. If this does not solve the issue continue
to the next steps.
You could solve this locally by installing Visual Studio 2010 on your
machine. This is not what I would recommend, but it would surely
overcome the issue
You could also download the file from this third party website and
copy it to your projects bin:
http://www.dll-files.com/dllindex/dll-files.shtml?msvcr100d
This option is the LEAST recommended option.
Run dependency Walker and see what file depends on the MSVCR100D.dll
and the try and fix that file in order to break your dependency. You can download depends here: http://www.dependencywalker.com/
Check to be sure that you're project is linking the correct version of
the CRT and any other libraries you may be using (e.g., MFC, ATL,
etc.)
Note: Installing the redistributables alone will NOT solve this problem, since the redistributables only contain the release version of the file MSVCR100.dll (notice no 'D')
MSVCR100D is part of the 2010 Visual Studio package - indicating that some components of your system are compiled with the older version of Visual Studio, so you will need to install the Visual Studio 2010 version - you can probably still develop with the 2012 version, just as long as [parts of] the 2010 is on the machine.
Or you need to recompile some components that your application depends on to use the 2012 (msvcr110d) libraries - if you have all the source code, that would be my preferrred method.

Multiple CRTs giving segfault

Background: I'm building a plugin for a large simulation framework. I'm compiling a DLL using Visual Studio C++ 2010.
After much bughunting and googling I believe I have a problem which stems from having multiple versions of CRT linked to my DLL. I'm getting a segfault in tidtable.c (from msvcr100.dll), in the function _CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue(). Reading this thread (there are multiple problems discussed, but towards the end this function is mentioned) is where I got the idea, and if I check the linking part of my project I see msvcr90.dll, ´msvcp100d.dllandmsvcr100d.dll`.
I'm using several external libraries, and I've been able to recompile all but one of them using VS2010. The last one is not open source however (it's a library belonging to the framework), and I guess that is where the dependency would come from. I'm not certain however, how could I check this?
Given that I'm right about where the dependency is coming from, what can I do?
You are linking to the release runtime from Visual Studio 2008 and debug runtime of Visual Studio 2010 ... you shouldn't mix and match release and debug in general. If you need the debug VC9 you'll need to install Visual Studio 2008 (install before 2010 to be safe)
However I'd probably just rebuild all projects and dependencies against VC10. You may be able to get away with installing the redist for VC9 if it's missing from your system for release only.
Edit: Link to Dependency Walker which is invaluable for determining missing or conflicting dependencies.

PreFast in VS 2010?

Which version of VS 2010 has PreFast static code analyzer for native c++? I have downloaded VS 2010 Ultimate edition trial version in hope that it would contain all the features, but could not found inbuilt PreFast in it.
I tried to link VS 2010 to set it directories with WDK's PreFast and add "/analyze" in comand Line additional options but unable to get results.
it's in ultimate (I just tested it), but I don't think it's in pro.
help page http://msdn.microsoft.com/en-us/library/bb385907.aspx
I was looking for some memory leakage, thread dead locks kind of rules.
Prefast is static analysis tool. It checks for possible NULL derefferensing, buffer overruns and such. You are looking for dynamic analysis tool like Bounds Checker. Not sure, that it is available for VS 2010. Another option would be to use Application Verifyer.