* Fix #1391 * Update librz/core/ctypes.c Co-authored-by: Riccardo Schirone <ret2libc@users.noreply.github.com> * Added test * Remove not needed check Co-authored-by: Giovanni <561184+wargio@users.noreply.github.com> Co-authored-by: Riccardo Schirone <ret2libc@users.noreply.github.com>
394 lines
No EOL
8.8 KiB
Text
394 lines
No EOL
8.8 KiB
Text
NAME=tc
|
|
FILE=bins/mach0/objc-employee
|
|
ARGS=-b 64
|
|
CMDS=<<EOF
|
|
.ic*
|
|
ts Employee
|
|
ts NSString
|
|
EOF
|
|
EXPECT=<<EOF
|
|
pf *?w*?*?qpppp (objc_class)isa _shortWord (NSString)_username (NSString)_firstName _wideWord username firstName shortWord wideWord
|
|
pf pqzd p0 p1 str len
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc2
|
|
FILE=bins/mach0/objc-employee
|
|
CMDS=icc*
|
|
EXPECT=<<EOF
|
|
typedef struct class_Employee {
|
|
struct objc_class * isa; // 0
|
|
short _shortWord; // 8
|
|
struct NSString* _username; // 16
|
|
struct NSString* _firstName; // 24
|
|
uint64_t _wideWord; // 32
|
|
} Employee;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc3
|
|
FILE=bins/mach0/objc-employee
|
|
CMDS=ic*
|
|
EXPECT=<<EOF
|
|
fs classes
|
|
"f class.Employee = 0x100001ae0"
|
|
"f super.Employee.NSObject = 0"
|
|
"f method.Employee.helloWorld = 0x100001ae0"
|
|
"f method.Employee.sayHello = 0x100001b10"
|
|
"f method.Employee.p0 = 0x100001b40"
|
|
"f method.Employee.p1 = 0x100001b60"
|
|
"f method.Employee.p2 = 0x100001b80"
|
|
"f method.Employee.p3 = 0x100001ba0"
|
|
"f method.Employee.base = 0x100001bc0"
|
|
"f method.Employee.username = 0x100001c10"
|
|
"f method.Employee.setUsername: = 0x100001c40"
|
|
"f method.Employee.firstName = 0x100001c80"
|
|
"f method.Employee.setFirstName: = 0x100001cb0"
|
|
"f method.Employee.shortWord = 0x100001cf0"
|
|
"f method.Employee.wideWord = 0x100001d10"
|
|
"f method.class.Employee.sayHello = 0x100001be0"
|
|
"f field.Employee.isa = 0x00000000"
|
|
"f field.Employee.Employee::(ivar)_shortWord = 0x100003328"
|
|
"f field.Employee.Employee::(ivar)_username = 0x100003330"
|
|
"f field.Employee.Employee::(ivar)_firstName = 0x100003338"
|
|
"f field.Employee.Employee::(ivar)_wideWord = 0x100003340"
|
|
"f field.Employee.Employee::(property)username = 0x00000000"
|
|
"f field.Employee.Employee::(property)firstName = 0x00000000"
|
|
"f field.Employee.Employee::(property)shortWord = 0x00000000"
|
|
"f field.Employee.Employee::(property)wideWord = 0x00000000"
|
|
td "struct Employee { struct objc_class * isa; short _shortWord; struct NSString* _username; struct NSString* _firstName; uint64_t _wideWord; void* username; void* firstName; void* shortWord; void* wideWord;};"
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc4
|
|
FILE=bins/mach0/objc-employee
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tc "struct Employee"
|
|
tc "struct NSString"
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
struct NSString {
|
|
void *p0;
|
|
size_t p1;
|
|
char *str;
|
|
int len;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc iOS14 arm64
|
|
FILE=bins/mach0/objc-employee-ios14-arm64
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tsc Employee
|
|
tsc NSString
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
struct NSString {
|
|
void *p0;
|
|
size_t p1;
|
|
char *str;
|
|
int len;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc2 iOS14 arm64
|
|
FILE=bins/mach0/objc-employee-ios14-arm64
|
|
CMDS=icc*
|
|
EXPECT=<<EOF
|
|
typedef struct class_Employee {
|
|
struct objc_class * isa; // 0
|
|
short _shortWord; // 8
|
|
struct NSString* _username; // 16
|
|
struct NSString* _firstName; // 24
|
|
uint64_t _wideWord; // 32
|
|
} Employee;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc3 iOS14 arm64
|
|
FILE=bins/mach0/objc-employee-ios14-arm64
|
|
CMDS=ic*
|
|
EXPECT=<<EOF
|
|
fs classes
|
|
"f class.Employee = 0x100007958"
|
|
"f super.Employee.NSObject = 0"
|
|
"f method.Employee.sayHello = 0x100007984"
|
|
"f method.Employee.helloWorld = 0x1000079b0"
|
|
"f method.Employee.p0 = 0x1000079dc"
|
|
"f method.Employee.p1 = 0x1000079f8"
|
|
"f method.Employee.p2 = 0x100007a14"
|
|
"f method.Employee.p3 = 0x100007a30"
|
|
"f method.Employee.base = 0x100007a4c"
|
|
"f method.Employee.username = 0x100007a64"
|
|
"f method.Employee.setUsername: = 0x100007a8c"
|
|
"f method.Employee.firstName = 0x100007ac4"
|
|
"f method.Employee.setFirstName: = 0x100007aec"
|
|
"f method.Employee.shortWord = 0x100007b24"
|
|
"f method.Employee.wideWord = 0x100007b44"
|
|
"f method.Employee..cxx_destruct = 0x100007b60"
|
|
"f method.class.Employee.sayHello = 0x100007958"
|
|
"f field.Employee.isa = 0x00000000"
|
|
"f field.Employee.Employee::(ivar)_shortWord = 0x10000c228"
|
|
"f field.Employee.Employee::(ivar)_username = 0x10000c22c"
|
|
"f field.Employee.Employee::(ivar)_firstName = 0x10000c230"
|
|
"f field.Employee.Employee::(ivar)_wideWord = 0x10000c234"
|
|
"f field.Employee.Employee::(property)username = 0x00000000"
|
|
"f field.Employee.Employee::(property)firstName = 0x00000000"
|
|
"f field.Employee.Employee::(property)shortWord = 0x00000000"
|
|
"f field.Employee.Employee::(property)wideWord = 0x00000000"
|
|
td "struct Employee { struct objc_class * isa; short _shortWord; struct NSString* _username; struct NSString* _firstName; uint64_t _wideWord; void* username; void* firstName; void* shortWord; void* wideWord;};"
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc4 iOS14 arm64
|
|
FILE=bins/mach0/objc-employee-ios14-arm64
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tc "struct Employee"
|
|
tc "struct NSString"
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
struct NSString {
|
|
void *p0;
|
|
size_t p1;
|
|
char *str;
|
|
int len;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc iOS14 arm64e
|
|
FILE=bins/mach0/objc-employee-ios14-arm64e
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tsc Employee
|
|
tsc NSString
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
struct NSString {
|
|
void *p0;
|
|
size_t p1;
|
|
char *str;
|
|
int len;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc2 iOS14 arm64e
|
|
FILE=bins/mach0/objc-employee-ios14-arm64e
|
|
CMDS=icc*
|
|
EXPECT=<<EOF
|
|
typedef struct class_Employee {
|
|
struct objc_class * isa; // 0
|
|
short _shortWord; // 8
|
|
struct NSString* _username; // 16
|
|
struct NSString* _firstName; // 24
|
|
uint64_t _wideWord; // 32
|
|
} Employee;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc3 iOS14 arm64e
|
|
FILE=bins/mach0/objc-employee-ios14-arm64e
|
|
CMDS=ic*
|
|
EXPECT=<<EOF
|
|
fs classes
|
|
"f class.Employee = 0x1000079a8"
|
|
"f method.Employee.sayHello = 0x1000079d8"
|
|
"f method.Employee.helloWorld = 0x100007a08"
|
|
"f method.Employee.p0 = 0x100007a38"
|
|
"f method.Employee.p1 = 0x100007a54"
|
|
"f method.Employee.p2 = 0x100007a70"
|
|
"f method.Employee.p3 = 0x100007a8c"
|
|
"f method.Employee.base = 0x100007aa8"
|
|
"f method.Employee.username = 0x100007ac0"
|
|
"f method.Employee.setUsername: = 0x100007ae8"
|
|
"f method.Employee.firstName = 0x100007b24"
|
|
"f method.Employee.setFirstName: = 0x100007b4c"
|
|
"f method.Employee.shortWord = 0x100007b88"
|
|
"f method.Employee.wideWord = 0x100007ba8"
|
|
"f method.Employee..cxx_destruct = 0x100007bc4"
|
|
"f method.class.Employee.sayHello = 0x1000079a8"
|
|
"f field.Employee.isa = 0x00000000"
|
|
"f field.Employee.Employee::(ivar)_shortWord = 0x10000c1d8"
|
|
"f field.Employee.Employee::(ivar)_username = 0x10000c1dc"
|
|
"f field.Employee.Employee::(ivar)_firstName = 0x10000c1e0"
|
|
"f field.Employee.Employee::(ivar)_wideWord = 0x10000c1e4"
|
|
"f field.Employee.Employee::(property)username = 0x00000000"
|
|
"f field.Employee.Employee::(property)firstName = 0x00000000"
|
|
"f field.Employee.Employee::(property)shortWord = 0x00000000"
|
|
"f field.Employee.Employee::(property)wideWord = 0x00000000"
|
|
td "struct Employee { struct objc_class * isa; short _shortWord; struct NSString* _username; struct NSString* _firstName; uint64_t _wideWord; void* username; void* firstName; void* shortWord; void* wideWord;};"
|
|
EOF
|
|
RUN
|
|
|
|
NAME=tc4 iOS14 arm64e
|
|
FILE=bins/mach0/objc-employee-ios14-arm64e
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tc "struct Employee"
|
|
tc "struct NSString"
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
struct NSString {
|
|
void *p0;
|
|
size_t p1;
|
|
char *str;
|
|
int len;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ttc typedef
|
|
FILE==
|
|
CMDS=<<EOF
|
|
td "typedef char *string;"
|
|
ttc string
|
|
EOF
|
|
EXPECT=<<EOF
|
|
typedef char * string;
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ttj typedef
|
|
FILE==
|
|
CMDS=<<EOF
|
|
td "typedef char *string;"
|
|
ttj string
|
|
EOF
|
|
EXPECT=<<EOF
|
|
{"name":"string","type":"char *"}
|
|
EOF
|
|
RUN
|
|
|
|
NAME=test cmd tsc
|
|
FILE=bins/mach0/objc-employee
|
|
CMDS=<<EOF
|
|
.ic*
|
|
tsc Employee
|
|
EOF
|
|
EXPECT=<<EOF
|
|
struct Employee {
|
|
struct objc_class *isa;
|
|
short _shortWord;
|
|
struct NSString *_username;
|
|
struct NSString *_firstName;
|
|
uint64_t _wideWord;
|
|
void *username;
|
|
void *firstName;
|
|
void *shortWord;
|
|
void *wideWord;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=test cmd tf
|
|
FILE=bins/mach0/objc-employee
|
|
CMDS=<<EOF
|
|
tf main
|
|
tf entry0
|
|
EOF
|
|
EXPECT=<<EOF
|
|
int main(int argc, char ** argv, char ** envp);
|
|
EOF
|
|
RUN
|
|
|
|
NAME=test cmd tec
|
|
FILE==
|
|
CMDS=<<EOF
|
|
td "enum foo {bar = 1, cow = 3};"
|
|
tec foo
|
|
EOF
|
|
EXPECT=<<EOF
|
|
enum foo {
|
|
bar = 1,
|
|
cow = 3
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=test cmd tuc
|
|
FILE==
|
|
CMDS=<<EOF
|
|
td "union Data {int i; int j;};"
|
|
tuc Data
|
|
EOF
|
|
EXPECT=<<EOF
|
|
union Data {
|
|
int i;
|
|
int j;
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=test cmd tsj
|
|
FILE==
|
|
CMDS=<<EOF
|
|
td "struct foo {};"
|
|
tsj foo
|
|
td "struct foo2 {int a; int b;};"
|
|
tsj foo2
|
|
EOF
|
|
EXPECT=<<EOF
|
|
{"name":"foo","members":{}}
|
|
{"name":"foo2","members":{"a":"int","b":"int"}}
|
|
EOF
|
|
RUN |