atosl 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/ext/atosl/main.h ADDED
@@ -0,0 +1,4 @@
1
+ #ifndef MAIN_H
2
+ #define MAIN_H
3
+ int symbolicate(const char* arch, const char *executable, char *addresses[], int numofaddresses);
4
+ #endif
data/ext/atosl/nlist.h ADDED
@@ -0,0 +1,312 @@
1
+ /*
2
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
3
+ *
4
+ * @APPLE_LICENSE_HEADER_START@
5
+ *
6
+ * This file contains Original Code and/or Modifications of Original Code
7
+ * as defined in and that are subject to the Apple Public Source License
8
+ * Version 2.0 (the 'License'). You may not use this file except in
9
+ * compliance with the License. Please obtain a copy of the License at
10
+ * http://www.opensource.apple.com/apsl/ and read it before using this
11
+ * file.
12
+ *
13
+ * The Original Code and all software distributed under the License are
14
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18
+ * Please see the License for the specific language governing rights and
19
+ * limitations under the License.
20
+ *
21
+ * @APPLE_LICENSE_HEADER_END@
22
+ */
23
+ #ifndef _MACHO_NLIST_H_
24
+ #define _MACHO_NLIST_H_
25
+ /* $NetBSD: nlist.h,v 1.5 1994/10/26 00:56:11 cgd Exp $ */
26
+
27
+ /*-
28
+ * Copyright (c) 1991, 1993
29
+ * The Regents of the University of California. All rights reserved.
30
+ * (c) UNIX System Laboratories, Inc.
31
+ * All or some portions of this file are derived from material licensed
32
+ * to the University of California by American Telephone and Telegraph
33
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
34
+ * the permission of UNIX System Laboratories, Inc.
35
+ *
36
+ * Redistribution and use in source and binary forms, with or without
37
+ * modification, are permitted provided that the following conditions
38
+ * are met:
39
+ * 1. Redistributions of source code must retain the above copyright
40
+ * notice, this list of conditions and the following disclaimer.
41
+ * 2. Redistributions in binary form must reproduce the above copyright
42
+ * notice, this list of conditions and the following disclaimer in the
43
+ * documentation and/or other materials provided with the distribution.
44
+ * 3. All advertising materials mentioning features or use of this software
45
+ * must display the following acknowledgement:
46
+ * This product includes software developed by the University of
47
+ * California, Berkeley and its contributors.
48
+ * 4. Neither the name of the University nor the names of its contributors
49
+ * may be used to endorse or promote products derived from this software
50
+ * without specific prior written permission.
51
+ *
52
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
53
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
54
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
55
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
56
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
57
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
58
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
59
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
60
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
61
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
62
+ * SUCH DAMAGE.
63
+ *
64
+ * @(#)nlist.h 8.2 (Berkeley) 1/21/94
65
+ */
66
+ #include <stdint.h>
67
+
68
+ /*
69
+ * Format of a symbol table entry of a Mach-O file for 32-bit architectures.
70
+ * Modified from the BSD format. The modifications from the original format
71
+ * were changing n_other (an unused field) to n_sect and the addition of the
72
+ * N_SECT type. These modifications are required to support symbols in a larger
73
+ * number of sections not just the three sections (text, data and bss) in a BSD
74
+ * file.
75
+ */
76
+ struct nlist {
77
+ union {
78
+ #ifndef __LP64__
79
+ char *n_name; /* for use when in-core */
80
+ #endif
81
+ uint32_t n_strx; /* index into the string table */
82
+ } n_un;
83
+ uint8_t n_type; /* type flag, see below */
84
+ uint8_t n_sect; /* section number or NO_SECT */
85
+ int16_t n_desc; /* see <mach-o/stab.h> */
86
+ uint32_t n_value; /* value of this symbol (or stab offset) */
87
+ };
88
+
89
+ /*
90
+ * This is the symbol table entry structure for 64-bit architectures.
91
+ */
92
+ struct nlist_64 {
93
+ union {
94
+ uint32_t n_strx; /* index into the string table */
95
+ } n_un;
96
+ uint8_t n_type; /* type flag, see below */
97
+ uint8_t n_sect; /* section number or NO_SECT */
98
+ uint16_t n_desc; /* see <mach-o/stab.h> */
99
+ uint64_t n_value; /* value of this symbol (or stab offset) */
100
+ };
101
+
102
+ /*
103
+ * Symbols with a index into the string table of zero (n_un.n_strx == 0) are
104
+ * defined to have a null, "", name. Therefore all string indexes to non null
105
+ * names must not have a zero string index. This is bit historical information
106
+ * that has never been well documented.
107
+ */
108
+
109
+ /*
110
+ * The n_type field really contains four fields:
111
+ * unsigned char N_STAB:3,
112
+ * N_PEXT:1,
113
+ * N_TYPE:3,
114
+ * N_EXT:1;
115
+ * which are used via the following masks.
116
+ */
117
+ #define N_STAB 0xe0 /* if any of these bits set, a symbolic debugging entry */
118
+ #define N_PEXT 0x10 /* private external symbol bit */
119
+ #define N_TYPE 0x0e /* mask for the type bits */
120
+ #define N_EXT 0x01 /* external symbol bit, set for external symbols */
121
+
122
+ /*
123
+ * Only symbolic debugging entries have some of the N_STAB bits set and if any
124
+ * of these bits are set then it is a symbolic debugging entry (a stab). In
125
+ * which case then the values of the n_type field (the entire field) are given
126
+ * in <mach-o/stab.h>
127
+ */
128
+
129
+ /*
130
+ * Values for N_TYPE bits of the n_type field.
131
+ */
132
+ #define N_UNDF 0x0 /* undefined, n_sect == NO_SECT */
133
+ #define N_ABS 0x2 /* absolute, n_sect == NO_SECT */
134
+ #define N_SECT 0xe /* defined in section number n_sect */
135
+ #define N_PBUD 0xc /* prebound undefined (defined in a dylib) */
136
+ #define N_INDR 0xa /* indirect */
137
+
138
+ /*
139
+ * If the type is N_INDR then the symbol is defined to be the same as another
140
+ * symbol. In this case the n_value field is an index into the string table
141
+ * of the other symbol's name. When the other symbol is defined then they both
142
+ * take on the defined type and value.
143
+ */
144
+
145
+ /*
146
+ * If the type is N_SECT then the n_sect field contains an ordinal of the
147
+ * section the symbol is defined in. The sections are numbered from 1 and
148
+ * refer to sections in order they appear in the load commands for the file
149
+ * they are in. This means the same ordinal may very well refer to different
150
+ * sections in different files.
151
+ *
152
+ * The n_value field for all symbol table entries (including N_STAB's) gets
153
+ * updated by the link editor based on the value of it's n_sect field and where
154
+ * the section n_sect references gets relocated. If the value of the n_sect
155
+ * field is NO_SECT then it's n_value field is not changed by the link editor.
156
+ */
157
+ #define NO_SECT 0 /* symbol is not in any section */
158
+ #define MAX_SECT 255 /* 1 thru 255 inclusive */
159
+
160
+ /*
161
+ * Common symbols are represented by undefined (N_UNDF) external (N_EXT) types
162
+ * who's values (n_value) are non-zero. In which case the value of the n_value
163
+ * field is the size (in bytes) of the common symbol. The n_sect field is set
164
+ * to NO_SECT. The alignment of a common symbol may be set as a power of 2
165
+ * between 2^1 and 2^15 as part of the n_desc field using the macros below. If
166
+ * the alignment is not set (a value of zero) then natural alignment based on
167
+ * the size is used.
168
+ */
169
+ #define GET_COMM_ALIGN(n_desc) (((n_desc) >> 8) & 0x0f)
170
+ #define SET_COMM_ALIGN(n_desc,align) \
171
+ (n_desc) = (((n_desc) & 0xf0ff) | (((align) & 0x0f) << 8))
172
+
173
+ /*
174
+ * To support the lazy binding of undefined symbols in the dynamic link-editor,
175
+ * the undefined symbols in the symbol table (the nlist structures) are marked
176
+ * with the indication if the undefined reference is a lazy reference or
177
+ * non-lazy reference. If both a non-lazy reference and a lazy reference is
178
+ * made to the same symbol the non-lazy reference takes precedence. A reference
179
+ * is lazy only when all references to that symbol are made through a symbol
180
+ * pointer in a lazy symbol pointer section.
181
+ *
182
+ * The implementation of marking nlist structures in the symbol table for
183
+ * undefined symbols will be to use some of the bits of the n_desc field as a
184
+ * reference type. The mask REFERENCE_TYPE will be applied to the n_desc field
185
+ * of an nlist structure for an undefined symbol to determine the type of
186
+ * undefined reference (lazy or non-lazy).
187
+ *
188
+ * The constants for the REFERENCE FLAGS are propagated to the reference table
189
+ * in a shared library file. In that case the constant for a defined symbol,
190
+ * REFERENCE_FLAG_DEFINED, is also used.
191
+ */
192
+ /* Reference type bits of the n_desc field of undefined symbols */
193
+ #define REFERENCE_TYPE 0x7
194
+ /* types of references */
195
+ #define REFERENCE_FLAG_UNDEFINED_NON_LAZY 0
196
+ #define REFERENCE_FLAG_UNDEFINED_LAZY 1
197
+ #define REFERENCE_FLAG_DEFINED 2
198
+ #define REFERENCE_FLAG_PRIVATE_DEFINED 3
199
+ #define REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 4
200
+ #define REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 5
201
+
202
+ /*
203
+ * To simplify stripping of objects that use are used with the dynamic link
204
+ * editor, the static link editor marks the symbols defined an object that are
205
+ * referenced by a dynamicly bound object (dynamic shared libraries, bundles).
206
+ * With this marking strip knows not to strip these symbols.
207
+ */
208
+ #define REFERENCED_DYNAMICALLY 0x0010
209
+
210
+ /*
211
+ * For images created by the static link editor with the -twolevel_namespace
212
+ * option in effect the flags field of the mach header is marked with
213
+ * MH_TWOLEVEL. And the binding of the undefined references of the image are
214
+ * determined by the static link editor. Which library an undefined symbol is
215
+ * bound to is recorded by the static linker in the high 8 bits of the n_desc
216
+ * field using the SET_LIBRARY_ORDINAL macro below. The ordinal recorded
217
+ * references the libraries listed in the Mach-O's LC_LOAD_DYLIB,
218
+ * LC_LOAD_WEAK_DYLIB, LC_REEXPORT_DYLIB, LC_LOAD_UPWARD_DYLIB, and
219
+ * LC_LAZY_LOAD_DYLIB, etc. load commands in the order they appear in the
220
+ * headers. The library ordinals start from 1.
221
+ * For a dynamic library that is built as a two-level namespace image the
222
+ * undefined references from module defined in another use the same nlist struct
223
+ * an in that case SELF_LIBRARY_ORDINAL is used as the library ordinal. For
224
+ * defined symbols in all images they also must have the library ordinal set to
225
+ * SELF_LIBRARY_ORDINAL. The EXECUTABLE_ORDINAL refers to the executable
226
+ * image for references from plugins that refer to the executable that loads
227
+ * them.
228
+ *
229
+ * The DYNAMIC_LOOKUP_ORDINAL is for undefined symbols in a two-level namespace
230
+ * image that are looked up by the dynamic linker with flat namespace semantics.
231
+ * This ordinal was added as a feature in Mac OS X 10.3 by reducing the
232
+ * value of MAX_LIBRARY_ORDINAL by one. So it is legal for existing binaries
233
+ * or binaries built with older tools to have 0xfe (254) dynamic libraries. In
234
+ * this case the ordinal value 0xfe (254) must be treated as a library ordinal
235
+ * for compatibility.
236
+ */
237
+ #define GET_LIBRARY_ORDINAL(n_desc) (((n_desc) >> 8) & 0xff)
238
+ #define SET_LIBRARY_ORDINAL(n_desc,ordinal) \
239
+ (n_desc) = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8))
240
+ #define SELF_LIBRARY_ORDINAL 0x0
241
+ #define MAX_LIBRARY_ORDINAL 0xfd
242
+ #define DYNAMIC_LOOKUP_ORDINAL 0xfe
243
+ #define EXECUTABLE_ORDINAL 0xff
244
+
245
+ /*
246
+ * The bit 0x0020 of the n_desc field is used for two non-overlapping purposes
247
+ * and has two different symbolic names, N_NO_DEAD_STRIP and N_DESC_DISCARDED.
248
+ */
249
+
250
+ /*
251
+ * The N_NO_DEAD_STRIP bit of the n_desc field only ever appears in a
252
+ * relocatable .o file (MH_OBJECT filetype). And is used to indicate to the
253
+ * static link editor it is never to dead strip the symbol.
254
+ */
255
+ #define N_NO_DEAD_STRIP 0x0020 /* symbol is not to be dead stripped */
256
+
257
+ /*
258
+ * The N_DESC_DISCARDED bit of the n_desc field never appears in linked image.
259
+ * But is used in very rare cases by the dynamic link editor to mark an in
260
+ * memory symbol as discared and longer used for linking.
261
+ */
262
+ #define N_DESC_DISCARDED 0x0020 /* symbol is discarded */
263
+
264
+ /*
265
+ * The N_WEAK_REF bit of the n_desc field indicates to the dynamic linker that
266
+ * the undefined symbol is allowed to be missing and is to have the address of
267
+ * zero when missing.
268
+ */
269
+ #define N_WEAK_REF 0x0040 /* symbol is weak referenced */
270
+
271
+ /*
272
+ * The N_WEAK_DEF bit of the n_desc field indicates to the static and dynamic
273
+ * linkers that the symbol definition is weak, allowing a non-weak symbol to
274
+ * also be used which causes the weak definition to be discared. Currently this
275
+ * is only supported for symbols in coalesed sections.
276
+ */
277
+ #define N_WEAK_DEF 0x0080 /* coalesed symbol is a weak definition */
278
+
279
+ /*
280
+ * The N_REF_TO_WEAK bit of the n_desc field indicates to the dynamic linker
281
+ * that the undefined symbol should be resolved using flat namespace searching.
282
+ */
283
+ #define N_REF_TO_WEAK 0x0080 /* reference to a weak symbol */
284
+
285
+ /*
286
+ * The N_ARM_THUMB_DEF bit of the n_desc field indicates that the symbol is
287
+ * a defintion of a Thumb function.
288
+ */
289
+ #define N_ARM_THUMB_DEF 0x0008 /* symbol is a Thumb function (ARM) */
290
+
291
+ /*
292
+ * The N_SYMBOL_RESOLVER bit of the n_desc field indicates that the
293
+ * that the function is actually a resolver function and should
294
+ * be called to get the address of the real function to use.
295
+ * This bit is only available in .o files (MH_OBJECT filetype)
296
+ */
297
+ #define N_SYMBOL_RESOLVER 0x0100
298
+
299
+ #ifndef __STRICT_BSD__
300
+ #if __cplusplus
301
+ extern "C" {
302
+ #endif /* __cplusplus */
303
+ /*
304
+ * The function nlist(3) from the C library.
305
+ */
306
+ extern int nlist (const char *filename, struct nlist *list);
307
+ #if __cplusplus
308
+ }
309
+ #endif /* __cplusplus */
310
+ #endif /* __STRICT_BSD__ */
311
+
312
+ #endif /* _MACHO_LIST_H_ */
data/lib/atosl.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "atosl/version"
2
+ require 'atosl/atosl'
3
+
4
+ module Atosl
5
+ def self.convert(arch, executable, addresses)
6
+ self.symbolicate(arch, executable, addresses);
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Atosl
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'test/unit'
2
+ require 'atosl'
3
+
4
+ class HolaTest < Test::Unit::TestCase
5
+ def test_executable
6
+ assert_equal "1", "1"
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: atosl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Reno Qiu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: atosl is used for converting binary addresses within a macho file to
56
+ symbols.
57
+ email:
58
+ - dechao.qiu@gmail.com
59
+ executables:
60
+ - atosl
61
+ extensions:
62
+ - ext/atosl/extconf.rb
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - atosl.gemspec
71
+ - bin/atosl
72
+ - ext/atosl/atosl.c
73
+ - ext/atosl/atosl.h
74
+ - ext/atosl/converter.c
75
+ - ext/atosl/converter.h
76
+ - ext/atosl/cputype.h
77
+ - ext/atosl/debug.h
78
+ - ext/atosl/dwarf2.h
79
+ - ext/atosl/extconf.rb
80
+ - ext/atosl/fat.h
81
+ - ext/atosl/loader.h
82
+ - ext/atosl/macho.c
83
+ - ext/atosl/macho.h
84
+ - ext/atosl/main.h
85
+ - ext/atosl/nlist.h
86
+ - lib/atosl.rb
87
+ - lib/atosl/version.rb
88
+ - test/test_atosl.rb
89
+ homepage: https://github.com/renoqiu/atosl
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.0.12
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: atos for Linux.
113
+ test_files:
114
+ - test/test_atosl.rb