You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First, let me thank you guys for making this. It's really fun to work with and it certainly beats appending a zip to the executable. 馃榿
I'm unsure about the sentinel though. On one hand the goal is compatibility with build-time injection using the linker. On the other hand, the only thing that prevents me from loading link-time resources is the sentinel fuse. I'd have to run sed or something...
Looking at the test.cpp it would seem it is safe to ignore postject_has_resource() since postject_find_resource(...)will return null if no resource is found. And indeed my application works better without postject_has_resource(). Now I can load both, resources injected at build-time and resources injected using postject.
So, my question is what is the sentinel/fuse actually guarding against? It just seems odd to introduce this artificial string substitution step since it breaks one of the main design goals: compatibility with link-time injection.
Unless the fuse has a hidden purpose that I don't understand just yet, I feel postject would be better of without it.
If it's what I think you are asking about the fuse is to ensure there is as close as possible to 0 impact on Node.js binaries shipped by the project. The furst ensures there is a close to zero overhead check so that when there is no bundled application there is no overhead.
Ah ok... a very low overhead pre-check makes sense. For build-time injection via linker-flags it would also make sense to set the fuse at build time. How about we somehow expose the initial value:
#ifndef POSTJECT_FUSE_VALUE
# definePOSTJECT_FUSE_VALUE0
#endif// use stringify macros to build the actual string
// The POSTJECT_SENTINEL_FUSE macro is a string of random characters selected by// the Node.js project that is present only once in the entire binary. It is// used by the postject_has_resource() function to efficiently detect if a// resource has been injected. See// https://github.com/nodejs/postject/blob/35343439cac8c488f2596d7c4c1dddfec1fddcae/postject-api.h#L42-L45.
#definePOSTJECT_SENTINEL_FUSE"NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2"
#include"postject-api.h"
#undef POSTJECT_SENTINEL_FUSE
Activity
mhdawson commentedon Jul 12, 2023
If it's what I think you are asking about the fuse is to ensure there is as close as possible to 0 impact on Node.js binaries shipped by the project. The furst ensures there is a close to zero overhead check so that when there is no bundled application there is no overhead.
agnat commentedon Jul 12, 2023
Ah ok... a very low overhead pre-check makes sense. For build-time injection via linker-flags it would also make sense to set the fuse at build time. How about we somehow expose the initial value:
... or with a bit more API:
Let me know which style you prefer and I make a PR...
RaisinTen commentedon Jul 14, 2023
FWIW, the initial value is already exposed as the
POSTJECT_SENTINEL_FUSEmacro in the header file:postject/postject-api.h
Lines 20 to 23 in 3c4f208
It can be customized at build-time if the
POSTJECT_SENTINEL_FUSEmacro is defined before the header is included. For reference, this is how it is done in Node.js: https://github.com/nodejs/node/blob/f9737b1b8c96e43cedfff764634524df62cf3109/src/node_sea.cc#L11-L18Is this what you were looking for?
agnat commentedon Jul 15, 2023
No. The macro
POSTJECT_SENTINEL_FUSEdefines the fuse name. I'd like to override the initial fuse value, which is currently a string literal. See https://github.com/nodejs/postject/blob/main/postject-api.h#L42This is useful when embedding resources using the linker.
RaisinTen commentedon Jul 20, 2023
Ah, okay. I personally like the second option in #88 (comment) more than the first one. Feel free to send a PR. :)