https://github.com/uroboro/runtime
Objective-C runtime access in Objective-C
https://github.com/uroboro/runtime
introspection jailbreak objective-c reverse-engineering runtime theos
Last synced: 12 months ago
JSON representation
Objective-C runtime access in Objective-C
- Host: GitHub
- URL: https://github.com/uroboro/runtime
- Owner: uroboro
- License: mit
- Created: 2016-03-15T22:28:30.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2017-03-30T05:51:04.000Z (almost 9 years ago)
- Last Synced: 2025-03-23T21:35:51.779Z (about 1 year ago)
- Topics: introspection, jailbreak, objective-c, reverse-engineering, runtime, theos
- Language: Objective-C
- Size: 32.2 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Runtime: *Objective-C runtime access in Objective-C*
[](https://travis-ci.org/uroboro/Runtime)
For use with Cycript.
Currently can read this:
``` objc
@protocol XYZProtocol
- (void)aMethod;
@end
@interface XYZClass : NSObject {
int **I[9];
void *(*P)(int, char *);
CGFloat CGF[3];
CGFloat asdf[2][3][4];
union ting { long L; char C[4]; struct hongs { char C:4; int B[2]; } hongs; } tong;
struct thing { void *(*P[2])(); int I; } thang;
union thongs { char C:4; int B[2]; } thungs[9875];
}
@property char c;
@property (nonatomic, retain) id object;
@property (nonatomic, assign) union thong1 { int II:4; int B[2]; } thung1;
@property (nonatomic, assign) union thong2 { int B[2]; char C:4; } thung2;
@property (nonatomic, assign) struct thing3 { int I; } thang3;
@property (atomic, assign, getter=isOtherObject, setter=otherObjectIs:) BOOL otherObject;
- (void)aMethodWithArg:(id)arg;
- (int *)aMethodWithArg:(id)arg0 andArg:(int[2])arg1;
- (void)aMethod;
@end
@implementation XYZClass
- (void)aMethod {
rLog(@"I got called");
}
- (void)aMethodWithArg:(id)arg {
rLog(@"I got called with arg: %@", [arg description]);
}
- (int *)aMethodWithArg:(id)arg0 andArg:(int[2])arg1 {
rLog(@"I got called with arg0:%@ and arg1:%d", [arg0 description], arg1[0]);
static int a[2] = { 0, 1 };
return a;
}
@end
```
Into this:
```objc
@interface XYZClass {
int **I[9];
/* fp */ void *(**P)(void *);
float CGF[3];
float asdf[2][3][4];
union ting { long L; char C[4]; struct hongs { char C:4; int B[2]; } hongs; } tong;
struct thing { /* fp */ void *(**P[2])(void *); int I; } thang;
union thongs { char C:4; int B[2]; } thungs[9875];
}
@property (assign) char c;
@property (nonatomic, retain) id object;
@property (nonatomic, assign) union thong1 { char II:4; int B[2]; } thung1;
@property (nonatomic, assign) union thong2 { int B[2]; char C:4; } thung2;
@property (nonatomic, assign) struct thing3 { int I; } thang3;
@property (assign, getter=isOtherObject, setter=otherObjectIs:) char otherObject;
- (void)aMethod;
- (void)aMethodWithArg:(id)arg0;
- (int *)aMethodWithArg:(id)arg0 andArg:(int [2])arg1;
@end
```