Проверка параметров функции.

?????????? ???? ??? ????????? ??????? ?????? ?? ????????? ????? ??????, ??? ??? ? ??? ????????? ??????? ?????? ???? ????. ??????? ????? ???????? ? ???, ???? ??? ???? ???????? ??????. ????, ??? ??????? ????????? ????????? ???????? ?????? ???? ???, ??? ????? ?, ????? ???????, ??? ?? ????? ??????????

???? ????? ???????????? ?????? ?? ???? ?????? ?? ??????????, ??? ????? ??? ???? ?????? ?????????? ? ??????? coding guidelines, ? ?????????, ??? ????????, ?????????? ????? ???????, ??????? ???? ????????????? ?? ?????. ??? ????? ????. ??? ??????? ????? ??????? ?? ????????? ????????:

  1. ????? ????????????????, ???????????? ??????? ? ???????????? ?????????;
  2. ??????? ??????? ?????????? ??????? ? ??????????? ????.

????? ?1 ??, ?? ????????? ????????? ?????, ??????? ?????????? – ???? C/C++, OS – Windows, ????????? – «???????» user/kernel mode ???.

? ??? ????? ?2 ????? ???????? ????????. ??????? ??? ??????:

  1. ????? ??????? ?????? ?????? ????????? ??????;
  2. ????? ??????? ???? ?? ????????????????? ????.

? ??????? ?? «???????????» ??????, ?????? ???? ????????????? ?????????, ???:

  1. ??? ?????? ??????? ????????? ? user space (ProbeXxx ???????);
  2. ??????/?????? ? user space ??????????? ??????? (??? ???????? ? ???? ?????????? ? ???? try-except);
  3. ?????? ????? ?????? ?? user space ??????????? ?????? ???? ??? (?????? ?????????? ? ????????? ?????);
  4. ??? ?????????, ????? ????, ??? ??? ???? ??????????? ? kernel space, ???????? ?????????? ???????? (???????? ?? ????? ?? ??????? ????????? ? ??????).

????????, ??? ?????????????? ???????? ????? ??????, ??? ???????????????? ??? ????? ??????????????, ??? ??? ????, ? ????? ????????? ?????/??????. ????????? ????? ????????, ??? ?????????????? ???????? ?? ????? ???? ????? ??????, ??? ???? ?????? ???????? ?? ????? ?????????????????? ?????????. ? ???, ?????? ??? ????? – ???? ????.

?????, ?????? ??????? ?? ???????????? ???? ?? ????. ?????? ?????? ????????????? ? ????? «?????????». ??????????? ????? ???? ???????? ???????????, ???????? ?????? ??? ?????????? ???? «int», ??? ?????? ??????, ???????? TCP ????? ????????????? ? IP ?????. ??????? ????????? ???????? ??????????? ?????????? ? ???????? ??????????? ??????. ? ??????? ????, ?????? ??1 – 3 ???????????? ?? ??? ????, ??? ???????? ??????????? ?????????? (?????? ? user space). ???????? ??????????? ????? ?????? ???????????? ???????????? ??????? ?4.

????? ?? ??? ?????? ?????? ????????? ??? ????????? ??????? - ???. ????? ???????? ????? ????????? ? ??????????? ??????? ? ??????? ??????? ? ???????? ?????? ??????, ????? ???????, ??? ???????? ?????????? ? ??????? ?? ?????????. ? ???? ? ?????????, ?? ?????? ??? ???????????? ??????? ????????, ??????? ?? ??? ????? ?? ? ????????? ?????????????? (? ???????? ??????? ??????). ??????????????, ??? «??????????» ?????? ????????? ??????????? ?????????? ???????????????.

???? ????????? ?? ??????????? ???????????, ??? ???????? ??? ??????????? ?????????? ??? «??????????» ?????? ?? ???????????. ????? ????, ????? ???????? ????? ???? ??????, ??? ??? ?????????? ????? ??????, ????? ??????? ????????????? ????????????? ??????????.

?????????? ???????? ??????????? ????? ?????? ???? ????? ????????? ?? ???????? – ?? ?????. ? ??????, ???????. ??? ????? ???????????? ?????? ??????? ?????? (Data Flow Analysis, DFD), ???? ???????? ??????? ? ???, ???:

  1. ???????????????? ??? ????????? ?????? ??????? (?.?. ??? ?????????? ???? ? ??????? ?????????);
  2. ???????????? ???????? ???????????? ??????, ? ?????, ?????? ? ???? ??? ??????????;
  3. ???????????? ??????? ??????????????????? ??????? ????????? ?????? ???????.

???????? ?????? ?? ????? ?????????????????? ? ????? ?????????????????? ????????? ????????? ????????? ????? ??????? ??????? (Trust Boundary), ??? ??????? ??????????? ??????? ?????? ????????? ??????????? ?????????? ??????, ??????? ??? ??????????? ??????????, ??? ? ??????????? ??????. ??? ??????????? DFD ????????? ??????? ???????, ??? ?????? (????????, IP ?????) ????? ???? ????????? ? ???? ?????????? ??? ??????? ??????????. ? ????? ??????, ??? ????????????????? ?????? ??????? ??????? ????? ????????? ?? ???? ??? ????????? ??????????? ??????.

????, ??????:

  1. ??????? ????????? ????????? ? ???? ??????, ? ????????, ??? ???????? ?? ??????????? ????? ??????????? ??????? ????????????;
  2. ???????? ??????????? ?????????? ??????????? ?????? ? ??????, ???? ???????? ?????? ???? ????? ??????? ???????. DFD ????????? ?????? ?????? ? ??????????? ???? ?????? ???????;
  3. ???????? ??????????? ?????? ???????????? ?????? ???????????? ???? ??????.

Cross-posted from blog.not-a-kernel-guy.com.