Comments (7)
You can't inject c functions across files though the Curren implementation will inject C++ functions. It could inject C functions I guess provided they are not static; No-one has ever asked before so I don't have any current plans to do this.
from hotreloading.
If this is actually important to you, try changing this line to be:
filterImageSymbols(ST_LAST_IMAGE, .any, { _ in return true }) {
This means it will try to interpose all symbols which will only work for function calls. It may be much slower. This will of course also require -Xlinker -interposable.
from hotreloading.
If you're looking for more information on what "interposing" is up to read this where it is referred to as "indirection" in the section "linking".
from hotreloading.
Got it, thanks~
from hotreloading.
I am still a little confused with -interposable. I checked the man ld
and found the interpretation as below
-interposable_list filename
The specified filename contains a list of global symbol names that should always be accessed
indirectly. For instance, if libSystem.dylib is linked such that _malloc is interposable, then
calls to malloc() from within libSystem will go through a dyld stub and could potentially
indirected to an alternate malloc. If libSystem.dylib were built without making _malloc
interposable then if _malloc was interposed at runtime, calls to malloc from with libSystem
would be missed (not interposed) because they would be direct calls.
-interposable
Indirects access to all to exported symbols when creating a dynamic library.
It looks like the -interposable only affect the dynamic library. But I test it in a executable binary, and found the follow info, the c_func_in_demovc
is a c func in a .m file.
// objdump -m --lazy-bind /path/to/executable_binary
__DATA __la_symbol_ptr 0x10000C058 this-image _c_func_in_demovc
So is the man ld
inaccurate, or I have a misunderstand with the interpretation?
from hotreloading.
I guess the ld
man page is inaccurate, it seems to work for all images, not just dynamic libraries.
from hotreloading.
Agree with you.
from hotreloading.
Related Issues (20)
- Problems using HotReloading as a Swift package HOT 4
- iOS device injection not working when running as a Mac app HOT 17
- Updates overlap in UI HOT 1
- class category injection failed on device HOT 7
- Some questions about the implementation. HOT 1
- Crasing in SwiftInjection HOT 25
- Is there anyway to re-compile a file only when cmd + s ? HOT 3
- cold start on device encounter watch dog HOT 13
- Hot reloading not changing my views HOT 6
- Will the DDHotKey affect the file watch ? HOT 6
- Cannot use HotReloading with Other debug configurations (ex. Dev, Test Configuration) HOT 12
- Xcode 15 beta link SwiftTrace failed HOT 8
- Hot reloading failing on real iOS device HOT 12
- Connection refused HOT 12
- Cannot reload on M1, getting an “eval101.dylib” can’t be opened because Apple cannot check it for malicious software error. HOT 21
- lopen() error: dlopen(/private/var/mobile/Containers/Data HOT 2
- Cannot reload on M1: Mac os Sonoma prevents InjectionIII from accessing data HOT 3
- Loading .dylib has failed, This is likely because Swift code being injected references a function using a default argument or a member with access control that is too restrictive or perhaps an XCTest that depends on code not normally linked into your application. Rebuilding and re-running your project (without a build clean) can resolve this. HOT 8
- Custom DerivedData folder breaks hot reloading HOT 8
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 hotreloading.