AutorÃa | Ultima modificación | Ver Log |
// Copyright 2019 Google//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.#pragma once#include <stdbool.h>#include <stdint.h>#include "Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h"#include "Crashlytics/Crashlytics/Helpers/FIRCLSFile.h"#include "Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h"__BEGIN_DECLS// Typically, apps seem to have ~700 binary images loaded#define CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT (1024)#define CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE (32)#define CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME 0#define FIRCLSUUIDStringLength (33)typedef struct {_Atomic(void*) volatile baseAddress;uint64_t size;#if CLS_DWARF_UNWINDING_SUPPORTEDconst void* ehFrame;#endif#if CLS_COMPACT_UNWINDING_SUPPORTEDconst void* unwindInfo;#endifconst void* crashInfo;#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAMEchar name[CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE];#endif} FIRCLSBinaryImageRuntimeNode;typedef struct {char uuidString[FIRCLSUUIDStringLength];bool encrypted;FIRCLSMachOVersion builtSDK;FIRCLSMachOVersion minSDK;FIRCLSBinaryImageRuntimeNode node;struct FIRCLSMachOSlice slice;intptr_t vmaddr_slide;} FIRCLSBinaryImageDetails;typedef struct {const char* path;} FIRCLSBinaryImageReadOnlyContext;typedef struct {FIRCLSFile file;FIRCLSBinaryImageRuntimeNode nodes[CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT];} FIRCLSBinaryImageReadWriteContext;void FIRCLSBinaryImageInit(FIRCLSBinaryImageReadOnlyContext* roContext,FIRCLSBinaryImageReadWriteContext* rwContext);#if CLS_COMPACT_UNWINDING_SUPPORTEDbool FIRCLSBinaryImageSafeFindImageForAddress(uintptr_t address,FIRCLSBinaryImageRuntimeNode* image);bool FIRCLSBinaryImageSafeHasUnwindInfo(FIRCLSBinaryImageRuntimeNode* image);#endifbool FIRCLSBinaryImageFindImageForUUID(const char* uuidString,FIRCLSBinaryImageDetails* imageDetails);bool FIRCLSBinaryImageRecordMainExecutable(FIRCLSFile* file);__END_DECLS