Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
115 views
in Technique[技术] by (71.8m points)

How to access properties/member of struct pointer in Swift

I am messing around with Mach-O Headers and dyld and came across this function _dyld_get_image_header that returns a pointer to the mach header of a dynamic library.

I thought I might be able to access the Mach-O segments of dynamic libraries through this pointer following this article. However, I am not able to access the properties of the Mach-O Headers and am getting errors . In the Swift code below, I attempted to access the ncmds or load command property of the struct and was met with an error:

var currentLibrary = 0
// Gets Pointer to Mach Header of First Dynamic Library, Index 0
let libHeader = unsafeBitCast(_dyld_get_image_header(UInt32(currentLibrary)), to: UnsafePointer<mach_header_64>.self)

print(libHeader.ncmds)

Error:

Value of type 'UnsafePointer<mach_header_64>' has no member 'ncmds'
question from:https://stackoverflow.com/questions/65912633/how-to-access-properties-member-of-struct-pointer-in-swift

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It's similar to c, where you would use the -> operator (libHeader->ncmds), requivalent to (*libHeader).ncmds. That is, first your reference the pointer to get to the mach_header_64 value, then you access its ncmds field.

In Swift, it's the exact same idea, with different syntax: libHeaver.pointee.ncmds


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...