Comments (4)
Hi @mdevans
It's very interesting. Could you provide a complete code sample? Or at least describe when do you call plog::init
and what compiler do you use?
from plog.
Thanks for your response @SergiusTheBest . I am using VS2015 C++ compiler. I am using the complex reflective dll injection technique as described by Dan Staples here: https://github.com/dismantl/ImprovedReflectiveDLLInjection. If you call plog::init within his "MyFunction()" (delayed dll init after dllmain()) the problem occurs. If I use standard injection technique using LoadLibrary() and CreateRemoteThread() plog::init works ok. I expect there is something in the way the image is loaded by ReflectiveLoader() which is omitting some critical init code? (nUserdataLen is 0 within MyFunction, a bug I haven't tracked down yet).
#include "ReflectiveLoader.h"
#include <stdio.h>
#include "plog\Log.h"
extern "C" DLLEXPORT BOOL
MyFunction(LPVOID lpUserdata, DWORD nUserdataLen)
{
LPSTR str = (LPSTR)malloc(80 + nUserdataLen);
sprintf_s(str, 80 + nUserdataLen, "Hello from MyFunction: %s!", (char*)lpUserdata);
MessageBoxA(NULL, str, (LPCSTR)lpUserdata, MB_OK);
plog::init(plog::verbose, "MDETEST.LOG");
if (!plog::get<0>())
OutputDebugString(L"Nope");
else
OutputDebugString(L"Yes");
free(str);
return TRUE;
}
from plog.
I did a little research and found out:
- VS2015 implements thread-safe static variables initialization with the help of a thread-local storage (TLS).
- ReflectiveLoader doesn't process TLS callbacks in the DLL image.
As the result constructors of static variables are not called.
Workaround: Use /Zc:threadSafeInit-
compiler switch to turn off thread-safe static variables initialization.
from plog.
Fascinating... thank-you very much Sergius, makes complete sense now. (switch works btw)
from plog.
Related Issues (20)
- [Bug] When creating and assigning to logger - Compiler givers error: HOT 4
- [Feature Request] Single logger, but each appender has a different level HOT 4
- [Question] How to use Chained for multiple Classes within many DLL's
- \r\n for TxtFormatter in raw consoles HOT 4
- [Question] How to add custom prefix (record) information? HOT 2
- Can't add ConsoleAppender in a if statement HOT 2
- std::filesystem::path issue with new utf-8 mode on MSVC/Windows HOT 5
- Capture stdout and redirect to plog HOT 11
- How to use plog library in mac, its not working in mac for me HOT 5
- Please add instruction how to run samples HOT 3
- Features say doesnt require c++11 but code uses c++11 HOT 3
- Plog not initializing with too long of a file name? HOT 3
- License + create custom logger for open62541 HOT 2
- How to log an indented multiline text? HOT 2
- SyslogFormatter HOT 1
- write to /var/log/syslog HOT 1
- Cannot resolve symbol "init" HOT 2
- README does not talk about "Initializers" at https://github.com/SergiusTheBest/plog?tab=readme-ov-file#step-2-initialization HOT 2
- How to chain multiple shared lib's log, and identify log content using log header or instance id? HOT 2
- DynamicAppender can not work good HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from plog.