|
本帖最后由 fanzeyi 于 2011-12-5 05:51 PM 编辑
嘛…… 开始研究 FluffOS @@ 然后想试试用下 MySQL ...
编译过程参照 http://wiki.desolation.org/MUD_D ... _to_MudOS.2FFluffOS 这里.. 嗯
然后在这里 http://lpmuds.net/smf/index.php?topic=634.0 找到了一个样例程序.. 然后随便下了个lima的 lib 写了个mysql命令.. 调用 db_connect 嗯..
先是一直出 Database security violation attempted 错误.. 然后查源码查到 packages/db.c 的 valid_database 函数..
- if (ret && (ret == (svalue_t *)-1 || (ret->type == T_STRING || (ret->type == T_NUMBER && ret->u.number))))
- return ret;
- error("Database security violation attempted\n"); // 这一行
- }
复制代码
嗯.. 不太熟悉 MySQL 的 C @.@ 求解..
还有个问题就是, 在 db.c 文件中的 f_db_connect 的定义是 void f_db_connect (void), 但是在LPC中调用的时候是 db_connect(server, db, username)
通过 grep 找到:
- [fanzeyi@muddy driver]$ grep -lr "db_connect" .
- ./ChangeLog.alpha
- ./efun_defs.c
- ./obj/interpret.o
- ./obj/db.o
- ./obj/lex.o
- ./driver
- ./efunctions.h
- ./packages/db.c
- ./packages/packages.a
- ./packages/db_spec.c
- ./driver.old
- ./opc.h
- ./efun_protos.h
- ./func_spec.cpp
复制代码
这些文件都看了下.. 应该是一个从LPC函数向C函数映射的东西.. 但是纠结于参数表..
还有就是用gdb调试的时候找到一个变量 sp .. 没有找到定义的地方.. @@ 这几个问题 求解
- switch (st_num_arg) {
- case 4: type = (sp - (args++))->u.number;
- case 3: user = (sp - (args++))->u.string;
- case 2: database = (sp - (args++))->u.string;
- case 1: host = (sp - (args++))->u.string;
- }
复制代码
以及就是 没有找到哪里是用来提供密码的 ..
=========================================
update:
- (gdb) p st_num_arg
- $6 = 3
- (gdb) p user
- $7 = 0x8149554 ""
- (gdb) p host
- $8 = 0x8149554 ""
- (gdb) p database
- $9 = 0x8149554 ""
复制代码
刚刚发贴的时候感觉这个 sp 就是LPC调用时候的参数表。。 st_num_arg 表示调用时的参数数量.. 很奇怪在gdb里面发现我传进去的参数全都变成 空字符串 了.. 继续研究
=========================
继续 update ...
好吧我明白为什么我的参数表都是 "" 了.. 我调用错函数了... 函数名太像不能怪我 TAT.. 还是在纠结 password .. 准备自己改下 db_connect 这个函数.. |
|