rbbcc 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rbbcc.rb +1 -0
- data/lib/rbbcc/bcc.rb +10 -2
- data/lib/rbbcc/clib.rb +13 -0
- data/lib/rbbcc/symbol_cache.rb +55 -0
- data/lib/rbbcc/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83335da3fa30d52d38210f68efa6cf19cb5d44143ecc58ecdc6d4df30560303e
|
4
|
+
data.tar.gz: 75d0c97a8624a72928b4195bd830257c79e6a5e883058d9ae5c6c53512fccb1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a634d67b7b8a322ac433825bdbf376e7ef3ebe30f2e43dc477eb6f52c14fbc812bf04a286a6e9af30ad3ffc999fe370c2bdfe0fee56608e501618973873f74a7
|
7
|
+
data.tar.gz: 9b9cc3a877ab56ec8ceb516b0fc576fe981784e8689ec026974e429cecbe6e82d6da06e74d7473d9e38819b50e2d430c01801d1deecaee3bc197900a91d93684
|
data/Gemfile.lock
CHANGED
data/lib/rbbcc.rb
CHANGED
data/lib/rbbcc/bcc.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rbbcc/consts'
|
2
|
+
require 'rbbcc/symbol_cache'
|
2
3
|
|
3
4
|
module RbBCC
|
4
5
|
SYSCALL_PREFIXES = [
|
@@ -42,6 +43,7 @@ module RbBCC
|
|
42
43
|
|
43
44
|
at_exit { self.cleanup }
|
44
45
|
end
|
46
|
+
attr_reader :module
|
45
47
|
|
46
48
|
def gen_args_from_usdt
|
47
49
|
ptr = Clib.bcc_usdt_genargs(@usdt_contexts.map(&:context).pack('J*'), @usdt_contexts.size)
|
@@ -204,8 +206,14 @@ module RbBCC
|
|
204
206
|
def fix_syscall_fnname(name)
|
205
207
|
SYSCALL_PREFIXES.each do |prefix|
|
206
208
|
if name.start_with?(prefix)
|
207
|
-
|
208
|
-
|
209
|
+
real = SYSCALL_PREFIXES.find { |candidate|
|
210
|
+
SymbolCache.resolve_global(name.sub(prefix, candidate))
|
211
|
+
}
|
212
|
+
unless real
|
213
|
+
real = prefix
|
214
|
+
end
|
215
|
+
|
216
|
+
return name.sub(prefix, real)
|
209
217
|
end
|
210
218
|
end
|
211
219
|
return name
|
data/lib/rbbcc/clib.rb
CHANGED
@@ -37,5 +37,18 @@ module RbBCC
|
|
37
37
|
extern 'int bcc_usdt_enable_probe(void *, char *, char *)'
|
38
38
|
extern 'char * bcc_usdt_genargs(void **, int)'
|
39
39
|
extern 'void bcc_usdt_foreach_uprobe(void *, void *)'
|
40
|
+
|
41
|
+
BCCSymbol = struct([
|
42
|
+
"const char *name",
|
43
|
+
"const char *demangle_name",
|
44
|
+
"const char *module",
|
45
|
+
"unsigned long offset"
|
46
|
+
])
|
47
|
+
|
48
|
+
extern 'void * bcc_symcache_new(int, void *)'
|
49
|
+
extern 'void bcc_free_symcache(void *, int)'
|
50
|
+
extern 'int bcc_symcache_resolve(void *, unsigned long, void *)'
|
51
|
+
extern 'int bcc_symcache_resolve_no_demangle(void *, unsigned long, void *)'
|
52
|
+
extern 'int bcc_symcache_resolve_name(void *, char *, char *, unsigned long long *)'
|
40
53
|
end
|
41
54
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rbbcc/clib'
|
2
|
+
|
3
|
+
module RbBCC
|
4
|
+
class SymbolCache
|
5
|
+
class << self
|
6
|
+
def caches
|
7
|
+
@caches ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def cache(pid)
|
11
|
+
pid = -1 if pid < 0 && pid != -1
|
12
|
+
caches[pid] ||= SymbolCache.new(pid)
|
13
|
+
caches[pid]
|
14
|
+
end
|
15
|
+
alias [] cache
|
16
|
+
|
17
|
+
def resolve_global(name)
|
18
|
+
self[-1].resolve_name(nil, name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(pid)
|
23
|
+
@cache = Clib.bcc_symcache_new(pid, nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
def resolve(addr, demangle)
|
27
|
+
sym = Clib::BCCSymcache.malloc
|
28
|
+
ret = if demangle
|
29
|
+
Clib.bcc_symcache_resolve(@cache, addr, sym)
|
30
|
+
else
|
31
|
+
Clib.bcc_symcache_resolve_no_demangle(@cache, addr, sym)
|
32
|
+
end
|
33
|
+
if res < 0
|
34
|
+
return [nil, addr, nil]
|
35
|
+
end
|
36
|
+
|
37
|
+
if demangle
|
38
|
+
name_res = sym.demangle_name
|
39
|
+
# Clib.bcc_symbol_free_demangle_name(sym)
|
40
|
+
else
|
41
|
+
name_res = sym.name
|
42
|
+
end
|
43
|
+
|
44
|
+
return [name_res, sym.offset, Clib.__extract_char(sym.module)]
|
45
|
+
end
|
46
|
+
|
47
|
+
def resolve_name(_module, name)
|
48
|
+
addr_p = Fiddle::Pointer.malloc(Fiddle::SIZEOF_UINTPTR_T)
|
49
|
+
if Clib.bcc_symcache_resolve_name(@cache, _module, name, addr_p) < 0
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
return addr_p
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/rbbcc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbcc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uchio Kondo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/rbbcc/bcc.rb
|
63
63
|
- lib/rbbcc/clib.rb
|
64
64
|
- lib/rbbcc/consts.rb
|
65
|
+
- lib/rbbcc/symbol_cache.rb
|
65
66
|
- lib/rbbcc/usdt.rb
|
66
67
|
- lib/rbbcc/version.rb
|
67
68
|
- rbbcc.gemspec
|