Commit Graph

47 Commits

Author SHA1 Message Date
Török Edvin
4116c65d1b Add bytecode API to determine whether running under JIT. 2010-10-18 12:35:39 +03:00
Török Edvin
8a8dbd59ea bytecode test mode: collect & diff events for JIT and interpreter.
If execution is different for JIT and interpreter test mode shows error.
2010-10-18 10:48:14 +03:00
Török Edvin
70c222c99c save lsig counts/offsets (bb #2055). 2010-08-02 23:08:21 +03:00
Török Edvin
762d46e8ea Fix matchicon bytecode API (bb #2139).
Now you can call it both from a normal lsig triggered BC, and from a PE hook BC.
The normal lsig triggered BC has exe_info (but not PE info) which allows it to
invoke the icon matcher API.
Also putting ICONGROUP1 into the ldb trigger of the bytecode works.
2010-08-02 21:52:15 +03:00
Török Edvin
1dae00ebf4 bytecode: add icon match API. 2010-08-02 18:21:24 +03:00
Török Edvin
dc200c6b19 Add bytecode API for pdf. 2010-08-02 18:21:24 +03:00
Török Edvin
d5ffa2acff Introduce BC_STARTUP bytecode (bb #2101, #2078).
This bytecode will be run in interpreter mode on startup:
it can disable the JIT, or disable all further bytecodes.
There will be a builtin copy of it that is loaded if
no BC_STARTUP bytecodes were loaded (like filetypes_int.h and daily.ftm).
Only one BC_STARTUP bytecode is accepted, so as soon as bytecode.cvd will
contain one, it won't be overridable!

This bytecode will replace all the JIT checks (CPU, selinux, pax) etc.,
and allows to disable the JIT on just specific OS/arch/compiler/etc.
combinations. There are too many combinations to have a dconf flag for each.

Also fix the bytecode dconf so that the individual JIT_* flags actually work
(previously we could disable the entire JIT, or none at all).

Also introduce preliminary support for bytecode test mode (we already have
auto, jit and interpreter mode, introducing another mode here is easiest).
The test mode doesn't actually compare the outputs yet, but it does fail if
the JIT is disabled / falls back to interpreter.
2010-07-29 13:48:18 +03:00
Török Edvin
a5a19f4518 bytecode: PaX and selfcheck.
Detect PaX and fallback to intepreter if needed (bb #2092).
Recent PaX versions deny the RWX mapping, but older versions silently change it
to RW, which causes the program to die as soon as it tries to execute JITed
code.

Add selfcheck on startup (bb #2092).
This will run a very simple bytecode on startup in both JIT and interpreter
mode. The bytecode only calls 1 libclamav API and returns.
2010-07-22 22:34:07 +03:00
Török Edvin
2545f9767c Rearrange some fields in structs to avoid holes. 2010-06-09 13:44:29 +03:00
Török Edvin
7a7365efe9 0.96.1 new APIs (cli_map etc.) 2010-05-12 23:51:20 +03:00
Török Edvin
b00a7cc8f8 jsnorm api. 2010-03-31 10:53:11 +03:00
Török Edvin
99536a178c Insert timeout checks directly into the JITed code.
pthread_cancel is broken on Mac OS X (it only works if the thread
you want to kill calls pthread_testcancel, which is never the situation
when you need async cancelation).
Anyway async cancelation is risky, it may leave bc_ctx in an inconsistent state.
So rather than doing using pthread_cancel (or pthread_kill+siglongjmp)
just insert the timeout checks into the JITed code directly.

These are inserted in each loop, if the loop's tripcount is unknown, or
higher than a threshold. They are also inserted after a certain amount
of APIcalls are made (even in absence of loops).
Note that 'loop' in this sense is not LLVM's notion of a natural loop,
it is simply a BB which is reachable both directly and via a backedge.

For example this doesn't contain natural loops but contains backedges (and a
potential infinite loop):
int foo(int a)
{
    int x=4;
    if (a == 42)
        goto head2;
head:
    x++;
head2:
    if (a >= 2) {
        x += 3;
        goto head;
    } else if (a >= 0) {
        x += 9;
        goto head;
    }
    return x;
}
2010-03-23 15:54:41 +02:00
Török Edvin
b63681a52b Introduce BytecodeTimeout. 2010-03-22 17:16:07 +02:00
Török Edvin
9cbece5ccd WiP fixing globals in interpreter. 2010-03-22 11:18:28 +02:00
Török Edvin
7b33a3661d More API fixes. 2010-03-22 11:18:28 +02:00
Török Edvin
6ad39a4099 zlib/buffer apis. 2010-03-22 11:18:28 +02:00
Török Edvin
75e18b29c2 minimalistic zlib api. 2010-03-22 11:18:28 +02:00
Török Edvin
d9fbce26fc More API additions for PDF. 2010-03-22 11:18:28 +02:00
Török Edvin
bc157ce357 prepare for reading globals from ctx 2010-03-06 16:00:54 +02:00
Török Edvin
6eeadbfeda dconf for bytecode. 2010-02-15 17:32:41 +02:00
Török Edvin
236fb13647 New pointer handling rules. 2010-02-15 17:32:40 +02:00
Török Edvin
847d7fc1b8 2009->2010 2010-02-02 14:03:32 +02:00
Török Edvin
2d45ef0616 Support for malloc in bytecode. Fix crash with mismatched api/flevel versions. 2010-01-20 20:04:01 +02:00
Török Edvin
0fa95ef231 filesize, and pe_rawaddr API. 2010-01-18 19:31:59 +02:00
Török Edvin
688799d126 yc_bytecode is able to unpack a file now! 2009-12-17 17:40:35 +02:00
Török Edvin
0a11015bf5 Refactor trace API, so that trace printing happens in clambc.
This will allow clambc to implement breakpoints, and watchpoints.
2009-12-09 17:05:05 +02:00
Török Edvin
124af5e8a5 Trace formatting fixes. 2009-12-09 11:43:17 +02:00
Török Edvin
65c740d7d8 Add support for tracing (if bytecode compiled with support).
TODO: global id 0 is now a null pointer, need to adjust rest of conversion code
accordingly.
2009-12-08 23:02:49 +02:00
Török Edvin
74b0023374 Fix after merge: update to fmap API. 2009-12-03 11:37:38 +02:00
Török Edvin
46e2863c4c Merge branch 'master' into bytecode
* master: (182 commits)
  libclamav/qsort.c: fix CMP1 macro (bb#1769)
  handle floating chars
  libclamav/readdb.c: make sure static sigs with floating chars go into AC
  sigtool: --decode-sigs: handle alternatives
  sigtool: --decode-sigs: handle .ldb sigs
  inflateinit spam
  sigtool: --decode-sigs: handle .ndb sigs
  fix sig printing
  Set limit to 255 so that warning is shown if maxthreads*maxrec would exceed it.
  Enable more than 256 FD support on Solaris (bb #1764).
  fix memleaks
  sigtool: --decode-sigs; decode .db entries (bb#1246)
  fsk sxs, gimme back my dll hell!
  Fix Solaris build: cli_hex2ui has to be added to libclamav.map
  Don't error on unused functions.
  sigtool: basic sig decoding
  sigtool/sigtool.c: handle .ign2 files (bb#1625)
  libclamav/qsort.c: don't call med3 when using internal cmp
  win32: fix globbing
  unify DUPMAX def
  ...

Conflicts:
	.gitignore
	Makefile.am
	configure
	libclamav/Makefile.in
	libclamav/clamav.h
	libclamav/disasm.c
	libclamav/libclamav.map
	libclamav/matcher.c
	libclamav/others.c
	libclamav/pe.c
	libclamav/pe.h
	libclamav/readdb.c
2009-12-03 11:25:24 +02:00
Török Edvin
3ae0a76d03 Support for scanning files created by bytecode. 2009-12-02 17:30:17 +02:00
Török Edvin
53bd5bb14d read optional debug metadata. 2009-11-30 15:22:20 +02:00
Török Edvin
88815fd801 Sync with compiler. 2009-09-30 13:41:02 +03:00
Török Edvin
d38d6dadef Logical signature hook for bytecode. 2009-09-22 11:04:33 +03:00
Török Edvin
459b13ed89 Initial support for __match_count. 2009-09-21 23:44:32 +03:00
Török Edvin
2922746173 Fix make distcheck. 2009-09-07 19:29:50 +03:00
Török Edvin
4789b8a5a6 Add draft file API, doesn't work yet. 2009-09-04 17:29:13 +03:00
Török Edvin
85a25497bd really execute the JITed code. 2009-08-27 20:41:29 +03:00
Török Edvin
3b33bd6830 Minimal LLVM codegen. 2009-08-27 18:12:39 +03:00
Török Edvin
d1487222f7 Draft of libclamav <-> jit communication. 2009-08-25 19:06:32 +03:00
Török Edvin
8cc286f57d Add support for type loader. 2009-08-17 15:25:12 +03:00
Török Edvin
6922903ad9 bytecode: fully switch to a stack based allocation, and operands with various bitwidths. 2009-08-17 15:13:29 +03:00
Török Edvin
82ca2ab420 Specialize operands depending on bitwidth. 2009-08-17 15:13:29 +03:00
Török Edvin
30188fccb9 constify 2009-07-13 19:40:24 +03:00
Török Edvin
ec5cccc7ef bytecode: allocate proper stack for functions. 2009-07-09 23:59:01 +03:00
Török Edvin
f3b2dc9e28 Implement ICMP_*. 2009-07-09 23:58:57 +03:00
Török Edvin
e0c4fd853c Start implementing bytecode opcodes. 2009-07-07 23:36:36 +03:00